/// <summary> /// 请求重连消息 /// </summary> private void ReqReconnect() { byte state = (byte)MapMgr.Instance.CurMapType; if (state < 0 || state > 2) { LogMgr.UnityError(string.Format("filtered map state:{0}", state)); return; } CoreEntry.gEventMgr.TriggerEvent(GameEvent.GE_OBJ_CLEAR, null); return; /* * MsgData_cReconnect data = new MsgData_cReconnect(); * data.Account = Account.Instance.AccountIDBytes; * data.Cookie = Account.Instance.Cookie; * data.Status = (sbyte)state; * data.ServerID = Account.Instance.ServerId; * * CoreEntry.netMgr.send((Int16)NetMsgDef.C_RECONNECT, data); */ }
// Use this for initialization void Start() { if (m_beginEfxPrefab != null && m_holdEfxPrefab != null && m_overEfxPrefab != null) { m_beginEfxObj = Instantiate(m_beginEfxPrefab) as GameObject; if (m_beginEfxObj != null) { m_beginEfxObj.transform.position = this.transform.position; m_beginEfxObj.transform.localRotation = this.transform.localRotation; } else { LogMgr.UnityError("beginEfxObj create failed!"); } m_holdEfxObj = Instantiate(m_holdEfxPrefab) as GameObject; if (m_holdEfxObj != null) { m_holdEfxObj.transform.position = this.transform.position; m_holdEfxObj.transform.localRotation = this.transform.localRotation; //yy m_holdEfxObj.AddComponent <DetailObject>(); m_holdEfxObj.SetActive(false); } else { LogMgr.UnityError("holdEfxObj create failed!"); } m_overEfxObj = Instantiate(m_overEfxPrefab) as GameObject; if (m_overEfxObj != null) { m_overEfxObj.transform.position = this.transform.position; m_overEfxObj.transform.localRotation = this.transform.localRotation; m_overEfxObj.SetActive(false); } else { LogMgr.UnityError("overEfxObj create failed!"); } Close(); } GameObject obstacle = new GameObject(); obstacle.name = "obstacle"; NavMeshObstacle navObs = obstacle.AddComponent <NavMeshObstacle>(); m_navObs = navObs; navObs.radius = 1.0f; navObs.carving = true; obstacle.transform.parent = this.transform; obstacle.transform.localPosition = new Vector3(0.0f, 0.0f, 0.0f); }
public void PlayUISound(int id, GameObject obj = null) { if (!CoreEntry.cfg_bEaxToggle) { return; } if (id == 0) { return; } string path = GetAudioPath(id); if (path == null) { LogMgr.UnityError("无效音效ID:" + id); return; } AudioClip clip = (AudioClip)CoreEntry.gResLoader.Load(path, typeof(AudioClip)); if (clip == null) { LogMgr.UnityError("音效配置错误 路径:" + path + " id" + id); return; } AudioSource source = null; if (obj != null) { source = obj.GetComponent <AudioSource>(); } else { source = GetComponent <AudioSource>(); } if (source == null) { if (obj != null) { source = obj.AddComponent <AudioSource>(); } else { source = gameObject.AddComponent <AudioSource>(); } source.minDistance = 1.0f; source.maxDistance = 5000; source.rolloffMode = AudioRolloffMode.Linear; //source.transform.position = transform.position; } source.clip = clip; source.Play(); }
private void LoadWeapon(Transform mainBody, int id, bool bDoubleWeapon) { Transform rTran = ActorObj.RecursiveFindChild(mainBody, "DM_R_Hand"); if (null == rTran) { LogMgr.UnityError("no DM_R_Hand point!!!"); return; } GameObject obj = SceneLoader.LoadModelObject(id); if (null == obj) { LogMgr.UnityError("no weapon:id " + id); return; } if (bDoubleWeapon) { Transform lTran = ActorObj.RecursiveFindChild(mainBody, "DM_L_Hand"); if (null == lTran) { LogMgr.UnityError("no DM_L_Hand point!!!"); return; } Transform lWeapon = obj.transform.Find("DM_L_wuqi01"); Transform rWeapon = obj.transform.Find("DM_R_wuqi01"); lWeapon.SetParent(lTran); lWeapon.localPosition = Vector3.zero; lWeapon.localScale = Vector3.one; lWeapon.localRotation = Quaternion.identity; rWeapon.SetParent(rTran); rWeapon.localPosition = Vector3.zero; rWeapon.localScale = Vector3.one; rWeapon.localRotation = Quaternion.identity; UnityEngine.Object.Destroy(obj); } else { obj.transform.SetParent(rTran); obj.transform.localPosition = Vector3.zero; obj.transform.localScale = Vector3.one; obj.transform.localRotation = Quaternion.identity; } }
public IEnumerator _FastMoveToTarget(int cfgID) { ActorObj actorBase = CoreEntry.gActorMgr.GetActorByConfigID(cfgID); if (actorBase == null) { LogMgr.UnityError("找不到怪物ID:" + cfgID); yield break; } CameraFollow cameraFollow = null; if (null != MainCamera) { cameraFollow = MainCamera.GetComponent <CameraFollow>(); } if (cameraFollow == null) { CoreEntry.gEventMgr.TriggerEvent(GameEvent.GE_TASK_Camera_end, null); yield break; } lastDistance = cameraFollow.m_distance; lastHeight = cameraFollow.m_height; CoreEntry.gGameMgr.pauseGame(); yield return(new WaitForSeconds(0.6f)); //TweenAttr2.SetAttr fnSetHeight = new TweenAttr2.SetAttr(cameraFollow.SetHeight); //TweenAttr.SetAttr fnSetDistance = new TweenAttr.SetAttr(cameraFollow.SetDistance); float distance = cameraFollow.getDistance(actorBase.transform); if (distance < 10) { cameraSpeed = 4; } else if (distance < 20) { cameraSpeed = 6; } LogMgr.UnityLog("镜头速度调整为:" + cameraSpeed); //播放动作 yield return(new WaitForSeconds(1.9f)); //通知剧情, 镜头已经移动到目标 CoreEntry.gEventMgr.TriggerEvent(GameEvent.GE_TASK_Camera_Focus, null); }
protected override void Main() { LogMgr.UnityLog("NetMgr.SenderThread.Main: Begin"); while (!IsTerminateFlagSet()) { bool sleep = false; SendBuffer buffer = null; lock (m_sendMsgs) { if (m_sendMsgs.Count > 0) { buffer = m_sendMsgs.Dequeue(); } else { sleep = true; //LogMgr.UnityError("======sendMsgs.Count ==0 ====="); } } if (buffer != null) { try { NetStream.Write(buffer.msg, 0, buffer.Length); NetStream.Flush(); } catch (IOException e) { LogMgr.UnityError("SenderThread, Message: " + e.Message); LogMgr.UnityError("SenderThread, StackTrace: " + e.StackTrace); LogMgr.UnityError("SenderThread, InnerException.Message: " + e.InnerException.Message); } lock (cacheSendMsgs) { cacheSendMsgs.Cache(buffer); } } if (sleep) { Thread.Sleep(15); } } LogMgr.UnityLog("NetMgr.SenderThread.Main: End"); }
/* * 创建贴花 */ static WarningDecel Create(string DecelPerferb, Vector3 wordPositon) { GameObject go = (GameObject)Instantiate(CoreEntry.gResLoader.LoadResource(DecelPerferb)); if (go) { WarningDecel wd = go.AddComponent <WarningDecel>(); //go.GetComponent<WarningDecel>() as WarningDecel; if (wd) { wd.Init(wordPositon, ref go); } return(wd); } else { LogMgr.UnityError("[WarningDecal Create Failed]"); return(null); } }
// Use this for initialization public static void SendEvent(string sEvtName) { List <UIOnEvent> eventList; if (g_UIOnEventDict.TryGetValue(sEvtName, out eventList)) { for (int i = 0; i < eventList.Count; ++i) { g_strEvent = sEvtName; try { eventList[i](); } catch (System.Exception e) { LogMgr.UnityError(e.ToString()); } } } }
/// <summary> /// 本接口采集玩家在游戏内点击各个面板按钮的日志,配置表在MainPanelUIConfig.xlsx表的t_panelindex页签 /// </summary> /// <param name="id">t_panelindex配置id</param> /// <param name="buttonIndex">各个面板里面子按钮的自定义编号</param> public void TrackGameOptLog(int id, int buttonIndex) { if (bSDK && mSKDType == 1) { LuaTable tb = ConfigManager.Instance.Common.GetPanelIndexConfig(id); if (null == tb) { LogMgr.UnityError("no config found in t_panelindex with id=" + id); return; } string ic = "TrackEvent"; string cat = "Client"; string act = "RolePanelOP"; string channel_id = XYSDK.Instance.getMasterID(); string app_id = XYSDK.Instance.GetAppID(); int server_id = SG.Account.Instance.ServerId; int cserver_id = SG.Account.Instance.ServerId; string user_id; LuaTable G = LuaMgr.Instance.GetLuaEnv().Global; user_id = "" + G.GetInPath <int>("ModelManager.LoginModel.userID"); string role_id = PlayerData.Instance.RoleID.ToString(); string role_name = WWW.EscapeURL("[" + Account.Instance.ServerId.ToString() + "]" + PlayerData.Instance.Name); string client_ip = Account.Instance.GetExtranetIPAddress(); //Network.player.externalIP.Equals("UNASSIGNED_SYSTEM_ADDRESS") ? Network.player.ipAddress : Network.player.externalIP; System.TimeSpan ts = System.DateTime.UtcNow - new System.DateTime(1970, 1, 1, 0, 0, 0, 0); long lt = (long)ts.TotalSeconds; string event_time = lt.ToString(); string log_id = Bundle.Md5Tool.Md5Sum(channel_id + app_id + server_id + "RolePanelOP" + event_time + user_id + role_id); int button_tid = tb.Get <int>("index"); int button_id = button_tid + buttonIndex; string url = string.Format("http://analytics.52xiyou.com/mo.json?ic={0}&cat={1}&act={2}&channel_id={3}&app_id={4}&server_id={5}&cserver_id={6}&user_id={7}&role_id={8}&role_name={9}&client_ip={10}&event_time={11}&log_id={12}&button_id={13}&button_tid={14}", ic, cat, act, channel_id, app_id, server_id, cserver_id, user_id, role_id, role_name, client_ip, event_time, log_id, button_id, button_tid); // LogMgr.Log("url: " + url); MonoInstance.Instance.StartCoroutine(HttpGet(url)); } }
void ModifySceneProperties(LuaTable mapDesc) { //Debug.Break(); if (mapDesc != null) { GameObject doorRoot = GameObject.Find("door"); if (doorRoot != null) { List <Door> doors = new List <Door>(); GameObject[] doorsObj = GameObject.FindGameObjectsWithTag("door"); //doorRoot.GetComponentsInChildren<Door>(true); for (int i = 0; i < doorsObj.Length; ++i) { doors.Add(doorsObj[i].GetComponent <Door>()); } } else { LogMgr.UnityError("can not find door or it is hidden"); } } }
/// <summary> /// ��ʼ�����á� /// </summary> public void InitConfig() { LuaTable G = LuaMgr.Instance.GetLuaEnv().Global; m_ConstsCfg = G.Get <Dictionary <int, LuaTable> >("t_consts"); m_NameIDDict = new Dictionary <string, LuaTable>(); foreach (var data in m_ConstsCfg) { LuaTable tbl = data.Value; string configName = tbl.Get <string>("name"); if (!string.IsNullOrEmpty(configName)) { if (!m_NameIDDict.ContainsKey(configName)) { m_NameIDDict.Add(configName, tbl); } else { LogMgr.UnityError("Config:t_consts: repeated name:" + configName); } } } }
void Fire() { CancelInvoke("Fire"); //屏震 不是主玩家 , 就不震屏幕 if (m_skillBase != null && m_skillBase.m_actor != null && m_skillBase.m_actor.gameObject != null) { if (m_skillBase.m_actor.IsMainPlayer() || m_skillBase.m_actor.mActorType == ActorType.AT_BOSS) { if (m_fireFlyAttackDesc.cameraShakeDesc != null) { //GameObject cellObj = (GameObject)Object.Instantiate(CoreEntry.gResLoader.LoadResource(m_fireFlyAttackDesc.cameraShakeDesc.prefabPath));//CoreEntry.gGameObjPoolMgr.InstantiateSkillCell(m_fireFlyAttackDesc.cameraShakeDesc.prefabPath); GameObject cellObj = CoreEntry.gGameObjPoolMgr.InstantiateSkillCell(m_fireFlyAttackDesc.cameraShakeDesc.prefabPath); cellObj.transform.parent = transform; ISkillCell skillCell = cellObj.GetComponent <ISkillCell>(); skillCell.Init(m_fireFlyAttackDesc.cameraShakeDesc, m_skillBase); m_skillBase.AddSkillCell(cellObj); } } } //发射点位置 Transform flyTransform = null; if (m_skillBase != null) { flyTransform = m_skillBase.FindChildTransform(m_fireFlyAttackDesc.firePos); } if (flyTransform == null) { LogMgr.UnityError("FireflyCell没有找到绑定点 \"" + m_fireFlyAttackDesc.firePos + "\""); return; } if (m_skillBase == null) { return; } // float diffAngle = 360f / m_fireFlyAttackDesc.bulletNum; float diffAngle = m_fireFlyAttackDesc.fAngle; for (int i = 0; i < m_fireFlyAttackDesc.bulletNum; ++i) { //加载子弹 GameObject objBullet = (GameObject)Instantiate(CoreEntry.gResLoader.LoadResource(m_fireFlyAttackDesc.bulletPrefab)); if (objBullet == null) { return; } objBullet.transform.position = flyTransform.position; Vector3 targetpos = new Vector3(0, 0, 0); // 下面这句有时候会造成弓箭兵 射出的箭向后飞,目标错乱 //ActorObj actorObj = m_skillBase.m_actor.GetAttackObj(); //if (actorObj == null) // actorObj = m_skillBase.m_hateActor; ActorObj actorObj = m_skillBase.GetSelTarget(); if (actorObj != null && m_fireFlyAttackDesc.bulletNum == 1) { //单个目标,指向目标方向 //Vector3 aimPos = new Vector3(actorObj.thisGameObject.transform.position.x, // objBullet.transform.position.y, actorObj.thisGameObject.transform.position.z); //aimPos = Vector3.Normalize(aimPos); //objBullet.transform.LookAt(aimPos); //Vector3 aimPos = new Vector3(actorObj.thisGameObject.transform.position.x, // objBullet.transform.position.y, actorObj.thisGameObject.transform.position.z); Vector3 aimPos = new Vector3(); aimPos = actorObj.thisGameObject.transform.position; aimPos.y = actorObj.GetBehitEfxPosition().y; Vector3 lookRot = aimPos - flyTransform.position; // 穿透的子弹不需要考虑高度 if (m_fireFlyAttackDesc.bThroughFlag) { lookRot.y = 0; // 设置为0时 高度不同时就打不到了 } if (lookRot == Vector3.zero) { return; } lookRot.Normalize(); objBullet.transform.rotation = Quaternion.LookRotation(lookRot); targetpos = aimPos; } else { if (i == 0) { //朝向 Quaternion rot = Quaternion.Euler(m_transform.rotation.eulerAngles.x, m_transform.rotation.eulerAngles.y + diffAngle * i, m_transform.rotation.eulerAngles.z); objBullet.transform.rotation = rot; } if (i % 2 == 0) { //朝向 Quaternion rot = Quaternion.Euler(m_transform.rotation.eulerAngles.x, m_transform.rotation.eulerAngles.y + diffAngle * (i + 1) * 0.5f, m_transform.rotation.eulerAngles.z); objBullet.transform.rotation = rot; } else { //朝向 Quaternion rot = Quaternion.Euler(m_transform.rotation.eulerAngles.x, m_transform.rotation.eulerAngles.y - diffAngle * (i + 1) * 0.5f, m_transform.rotation.eulerAngles.z); objBullet.transform.rotation = rot; } } // 弹弹乐 TanTanLe tantan = objBullet.GetComponent <TanTanLe>(); if (tantan != null) { BulletParam param = new BulletParam(); param.flySpeed = m_fireFlyAttackDesc.flySpeed; param.flyTime = m_fireFlyAttackDesc.flyTime; param.skillID = m_skillBase.m_skillID; param.castObj = m_skillBase.m_actor.thisGameObject; param.damageActorTypeList = m_fireFlyAttackDesc.aimActorTypeList; param.bThroughFlag = m_fireFlyAttackDesc.bThroughFlag; param.projectile = m_fireFlyAttackDesc.projectile; param.TanTanLeCount = m_fireFlyAttackDesc.TanTanLeCount; param.TanTanLeDis = m_fireFlyAttackDesc.TanTanLeDis; param.dizzyTime = m_fireFlyAttackDesc.dizzyTime; param.targetpos = targetpos; if (m_skillBase != null && m_skillBase.m_actor != null) { ActorObj actorobj = m_skillBase.m_hitActor; if (actorobj != null) { param.aimTransform = actorobj.transform; } else { actorObj = m_skillBase.m_actor.GetAttackObj(); if (actorObj == null) { actorObj = m_skillBase.m_hitActor; } if (actorobj != null) { param.aimTransform = actorobj.transform; } { ActorObj gameobj = m_skillBase.GetSelTarget(); if (gameobj != null) { param.aimTransform = gameobj.transform; } } } } tantan.Init(param); } else // 子弹 { Bullet bullet = objBullet.GetComponent <Bullet>(); BulletParam param = new BulletParam(); param.m_skillBase = m_skillBase; param.flySpeed = m_fireFlyAttackDesc.flySpeed; param.flyTime = m_fireFlyAttackDesc.flyTime; param.skillID = m_skillBase.m_skillID; param.castObj = m_skillBase.m_actor.thisGameObject; param.damageActorTypeList = m_fireFlyAttackDesc.aimActorTypeList; param.bThroughFlag = m_fireFlyAttackDesc.bThroughFlag; param.projectile = m_fireFlyAttackDesc.projectile; param.targetpos = targetpos; param.bTakeAwayTarget = m_fireFlyAttackDesc.bTakeAwayTarget; param.disappearWhenTouchWall = m_fireFlyAttackDesc.disappearWhenTouchWall; param.bCanNotMoveWhenTakenAway = m_fireFlyAttackDesc.bCanNotMoveWhenTakenAway; param.bTraceTarget = m_fireFlyAttackDesc.bTraceTarget; param.bAttachToSkill = m_fireFlyAttackDesc.bAttachToSkill; param.bAttackMoreThanOnce = m_fireFlyAttackDesc.bAttackMoreThanOnce; param.bEndTheSkillWhenDisappear = m_fireFlyAttackDesc.bEndTheSkillWhenDisappear; bullet.Init(param); } } }
public IEnumerator _moveToTarget(int resID) { //等待场景加载完才播boss 动画 while (CoreEntry.bLoadSceneComplete != true) { LogMgr.UnityLog("_moveToTarget 等待场景加载完才播boss 动画 "); yield return(new WaitForSeconds(0.1f)); } ActorObj actorBase = CoreEntry.gActorMgr.GetActorByConfigID(resID); if (actorBase == null) { LogMgr.UnityError("找不到怪物ID:" + resID); CoreEntry.gEventMgr.TriggerEvent(GameEvent.GE_TASK_Camera_end, null); yield break; } IActorState state = actorBase.GetActorState(ACTOR_STATE.AS_ENTER); if (state != null) { //state.Reset(); try { EnterState eState = state as EnterState; eState.EndEnterStateFromCamera(actorBase); } catch (Exception e) { LogMgr.UnityError(e.ToString()); //状态没有初始化 } } CameraFollow cameraFollow = null; if (null != MainCamera) { cameraFollow = MainCamera.GetComponent <CameraFollow>(); } if (cameraFollow == null) { CoreEntry.gEventMgr.TriggerEvent(GameEvent.GE_TASK_Camera_end, null); yield break; } lastDistance = cameraFollow.m_distance; lastHeight = cameraFollow.m_height; CoreEntry.gGameMgr.pauseGame(); yield return(new WaitForSeconds(0.6f)); //TweenAttr2.SetAttr fnSetHeight = new TweenAttr2.SetAttr(cameraFollow.SetHeight); //TweenAttr.SetAttr fnSetDistance = new TweenAttr.SetAttr(cameraFollow.SetDistance); float distance = cameraFollow.getDistance(m_bossObj.transform); if (distance < 10) { cameraSpeed = 4; } else if (distance < 20) { cameraSpeed = 6; } LogMgr.UnityLog("镜头速度调整为:" + cameraSpeed); yield return(new WaitForSeconds(1.9f)); //通知剧情, 镜头已经移动到目标 CoreEntry.gEventMgr.TriggerEvent(GameEvent.GE_TASK_Camera_Focus, null); }
public void OnServerPushItemData(GameEvent ge, EventParameter parameter) { LogMgr.UnityError("---------------OnServerPushItemData"); }
void Start() { CancelInvoke("Start"); if (m_skillBase == null || m_skillBase.m_actor == null) { return; } m_skillBase.m_actor.ReqirueCanNotBeControlledByInput(); //主角在电梯上禁止美术位移 if (CoreEntry.gSceneMgr.IsPlayerOnElevator()) { return; } if (m_movePosAttackDesc == null) { return; } LuaTable skillDesc = m_skillBase.m_actor.GetCurSkillDesc(m_skillBase.m_skillID); if (skillDesc == null) { LogMgr.UnityError("non SkillDesc! " + m_skillBase.m_skillID); return; } //SkillClassDisplayDesc skillClass = m_gameDBMgr.GetSkillClassDisplayDesc(skillDesc.Get<int>("skillDisplayID")); //计算位移距离 m_distance = m_movePosAttackDesc.moveDistance; //使用目标的位置, 前面0.5米 if (m_skillBase.m_actor.IsMainPlayer()) { if (m_skillBase.m_actor.m_SelectTargetObject != null) { float dist1 = Vector3.Distance(transform.position, m_skillBase.m_actor.m_SelectTargetObject.transform.position) - 0.5f; if (dist1 > m_distance) { dist1 = m_distance; } m_distance = dist1; } } float resetDistance = m_distance; //设置位移 do { ActorObj ActorObj = m_skillBase.m_actor.GetAttackObj(); if (ActorObj == null) { ActorObj = m_skillBase.m_hitActor; } if (ActorObj == null) { LogMgr.UnityLog("CurveMove:no target"); break; } GameObject targetObj = ActorObj.thisGameObject; if (targetObj == null) { LogMgr.UnityLog("CurveMove:no target"); break; } ActorObj targetActorBase = targetObj.GetComponent <ActorObj>(); if (targetActorBase == null) { LogMgr.UnityError("CurveMove:no actorbase"); break; } if (m_movePosAttackDesc.isStopForTarget) { float fDistTo = m_skillBase.m_actor.GetColliderRadius() + targetObj.GetComponent <ActorObj>().GetColliderRadius(); if (CoreEntry.gGameMgr.IsPvpState()) { fDistTo += 1.2f; } //不可以穿透,重置位移大小 float aimDistance = Vector3.Distance(m_transform.position, targetObj.transform.position) - fDistTo - 0.2f; //两个物体间的距离 //范围内,不需要位移 if (aimDistance <= 0) { //Debug.LogWarning("CurveMove: don't need excute!"); return; } resetDistance = Mathf.Min(aimDistance, resetDistance); } else { resetDistance = m_distance; } } while (false); Quaternion r0 = Quaternion.Euler(m_transform.eulerAngles); Vector3 pos = m_transform.position + r0 * Vector3.forward * resetDistance; //找到对应地面上的点 Vector3 aimPos = m_baseTool.GetGroundPoint(pos); if (aimPos.Equals(Vector3.zero)) { return; } Vector3 dstDir = aimPos - m_transform.position; dstDir.Normalize(); //左手方向 //Vector3 leftDir = Quaternion.Euler(new Vector3(0, 90, 0)) * dstDir; //Vector3 rightDir = Quaternion.Euler(new Vector3(0, -90, 0)) * dstDir; //Vector3 backDir = Quaternion.Euler(new Vector3(0, 180, 0)) * dstDir; //float dstDistance = Vector3.Distance(m_transform.position, aimPos); m_needMove = true; //向上移动点 //aimPos += new Vector3(0, 0.2f, 0); aimPos = m_baseTool.GetLineReachablePos(m_transform.position, aimPos); aimPos = m_baseTool.GetGroundPoint(aimPos); if (m_skillBase.m_actor.IsMainPlayer()) { m_dstPos = aimPos; } else { m_dstPos = m_skillBase.m_actor.m_CurveMovePos; } //使用曲线 CurveMoveParam param = new CurveMoveParam(); param.aimActorTypeList = m_movePosAttackDesc.resetAimActorTypeList; param.isCarryOffTarget = m_movePosAttackDesc.isCarryOffTarget; param.isStopForTarget = m_movePosAttackDesc.isStopForTarget; LuaTable skill_action = CoreEntry.gSkillMgr.GetSkillActon(m_skillBase.m_skillID); if (skill_action != null) { m_uuid = m_skillBase.m_actor.UseCurveData3(skill_action.Get <string>("animation"), m_dstPos,// m_dstPos, param); } m_param = param; //拖尾特效 if (m_movePosAttackDesc.efxPrefab.Length > 0) { //GameObject efxObj = Instantiate(CoreEntry.gResLoader.LoadResource(m_movePosAttackDesc.efxPrefab)) as GameObject; GameObject efxObj = CoreEntry.gGameObjPoolMgr.InstantiateEffect(m_movePosAttackDesc.efxPrefab); EfxAttachActionPool efx = efxObj.GetComponent <EfxAttachActionPool>(); if (efx == null) { efx = efxObj.AddComponent <EfxAttachActionPool>(); } float efxTime = 1.0f; if (skill_action != null) { m_skillBase.m_actor.GetLeftActionTime(skill_action.Get <string>("animation")); } efx.Init(m_skillBase.m_actor.transform, efxTime); } }
//播放动画,特效,声音 IEnumerator PlayActionEfxSound(SkillPlayParam param, float delayTime) { if (m_actor == null) { yield break; } m_strActionName = param.action; if (m_strActionName != null && m_strActionName.Length > 0) { //动作带位移 的 不能延迟播放, 延迟播放将影响 位移曲线计算 m_actor.PlayAction(m_strActionName, false); m_actor.SetActionTime(m_strActionName, param.startTime); m_actor.SetSkillActionSpeed(m_strActionName, param.speed, m_skillDesc); } //其它玩家不播放了 if (m_actor.mActorType == ActorType.AT_REMOTE_PLAYER) { yield break; } if (m_actor.mActorType == ActorType.AT_PET) { PetObj pet = m_actor as PetObj; if (null != pet && pet.m_MasterActor != CoreEntry.gActorMgr.MainPlayer) { yield break; } } //播放声音 string sound1 = param.sound; string sound2 = param.voice; if (sound1 != null && sound1.Length > 0) { m_actor.StopSound(); m_actor.PlaySound(sound1); } if (sound2 != null && sound2.Length > 0) { m_actor.StopSound2(); m_actor.PlaySound2(sound2); } LuaTable skill_action = CoreEntry.gSkillMgr.GetSkillActon(m_skillID); if (skill_action == null) { Debug.LogError("==skill_action == is null m_skillID = " + m_skillID); yield break; } Vector3 efxPos = m_actor.transform.position; bool isBind = skill_action.Get <bool>("isBind"); int bindType = skill_action.Get <int>("skillEfxPos"); if (!isBind) { if (bindType == 1) { ActorObj target = m_actor.GetSelTarget(); if (null != target) { efxPos = target.transform.position; } } } if (delayTime > 0.0001f) { yield return(new WaitForSeconds(delayTime)); } //if (ByteToString.toString(m_skillDesc.szAttackEfxPrefab).Length > 0) if (param.actionEfx != null && param.actionEfx.Length > 0) { if (/*m_skillDesc.skilltype == 0 && */ m_actor.mActorType == ActorType.AT_BOSS) { yield return(new WaitForSeconds(m_actor.NoramalAttackEffectDelayTime)); } if (skill_action != null) { param.actionEfx = skill_action.Get <string>("skilleffect"); //efxObj = Instantiate(CoreEntry.gResLoader.LoadResource(param.actionEfx)) as GameObject;//CoreEntry.gGameObjPoolMgr.InstantiateEffect(param.actionEfx); efxObj = CoreEntry.gGameObjPoolMgr.InstantiateEffect(param.actionEfx); if (efxObj == null) { LogMgr.LogError("找不到attackEfxPrefab:" + skill_action.Get <string>("skilleffect") + " " + m_skillDesc.Get <string>("name")); } } float maxEfxTime = 0; if (skill_action.Get <float>("skillEfxLength") > 0) { maxEfxTime = skill_action.Get <float>("skillEfxLength"); } //LogMgr.UnityLog("maxEfxTime=" + maxEfxTime + ", " + m_strActionName); //特效存在时间 if (maxEfxTime <= 0.001) { maxEfxTime = m_actor.GetActionLength(m_strActionName); if (maxEfxTime <= 0.001) { LogMgr.UnityError("技能 动作时间 没有配置 skillID:" + m_skillDesc.Get <int>("id")); } } bool isFollowMove = false; EfxAttachActionPool efx = efxObj.GetComponent <EfxAttachActionPool>(); if (efx == null) { efx = efxObj.AddComponent <EfxAttachActionPool>(); } if (efx != null) { efx.Init(m_actor.transform, maxEfxTime, isFollowMove); m_actionEfx = efx; if (isBind) { ActorObj bindActor = null; if (bindType == 0) { bindActor = m_actor; } else { bindActor = m_actor.GetSelTarget(); } Transform bindTran = null; if (null != bindActor) { string hangPoint = skill_action.Get <string>("hangPoint"); if (!string.IsNullOrEmpty(hangPoint)) { bindTran = bindActor.transform.FindChild(hangPoint); } if (null == bindTran) { bindTran = bindActor.transform; } } else { bindTran = m_actor.transform; } m_actionEfx.transform.parent = bindTran; m_actionEfx.transform.localPosition = Vector3.zero; m_actionEfx.transform.localScale = Vector3.one; m_actionEfx.transform.rotation = m_actor.transform.rotation; } else { if (bindType == 1) { m_actionEfx.transform.position = efxPos; } else { m_actionEfx.transform.position = m_actor.transform.position; } m_actionEfx.transform.localScale = Vector3.one; m_actionEfx.transform.rotation = m_actor.transform.rotation; } //设置有挂点的特效 Transform[] childTransform = efxObj.GetComponentsInChildren <Transform>(); //foreach (Transform childTrans in childTransform) for (int i = 0; i < childTransform.Length; ++i) { Transform childTrans = childTransform[i]; EfxSetAttachPoint setAttach = childTrans.gameObject.GetComponent <EfxSetAttachPoint>(); if (setAttach == null || setAttach.m_attachPointEnum == AttachPoint.E_None) { continue; } setAttach.Init(false); Transform parent = m_actor.GetChildTransform(setAttach.m_attachPointEnum.ToString()); if (parent != null) { childTrans.parent = parent; childTrans.localPosition = Vector3.zero; childTrans.localRotation = Quaternion.identity; childTrans.localScale = Vector3.one; m_attachEfxObjectlist.Add(childTrans.gameObject); } } //影子 ghostMesh[] ghostMesh = efx.GetComponentsInChildren <ghostMesh>(); if (ghostMesh.Length > 0) { SkinnedMeshRenderer MianSkinMesh = m_actor.m_skinnedMeshRenderer[0]; for (int i = 0; i < m_actor.m_skinnedMeshRenderer.Length; ++i) { if (m_actor.m_skinnedMeshRenderer[i].name.Contains("weapon")) { continue; } MianSkinMesh = m_actor.m_skinnedMeshRenderer[i]; } for (int i = 0; i < ghostMesh.Length; ++i) { ghostMesh[i].characterMesh[0] = MianSkinMesh; } } } } yield return(1); }
private void ShowBossSkillWarning() { if (null == m_actor || m_actor.mActorType != ActorType.AT_BOSS) { return; } if (null == m_skillDesc || null == m_skilleffect) { return; } int castSkillType = m_skillDesc.Get <int>("faction_limit"); if (castSkillType == 2) { return; } castSkillType = m_skillDesc.Get <int>("subtype"); if (castSkillType < (int)SkillType.SKILL_CHARGE || castSkillType > (int)SkillType.SKILL_BIGAOE) { LogMgr.UnityError(string.Format("skill:{0} has an invalid skill subtype:{1}", m_skillID, castSkillType)); return; } if (castSkillType == (int)SkillType.SKILL_NORMAL) { return; } int rangeType = m_skilleffect.Get <int>("range"); int param1 = m_skilleffect.Get <int>("distance"); int param2 = m_skilleffect.Get <int>("angle"); GameObject efxObj = null; Vector3 pos; bool isRectWarning = false; if (rangeType == (int)SkillRangeType.SKILL_TARGET || rangeType == (int)SkillRangeType.SKILL_TARGET_CIRCLE) { ActorObj target = m_actor.GetSelTarget(); if (null == target) { return; } pos = target.transform.position; efxObj = CoreEntry.gGameObjPoolMgr.InstantiateEffect("Effect/skill/remain/fx_yujing_yuan"); if (null != efxObj) { efxObj.transform.localRotation = Quaternion.identity; efxObj.transform.localScale = new Vector3(param1 * 2.0f, 1.0f, param1 * 2.0f); } } else { pos = m_actor.transform.position; if (rangeType == (int)SkillRangeType.SKILL_SELF_FUN) { efxObj = CoreEntry.gGameObjPoolMgr.InstantiateEffect("Effect/skill/remain/fx_yujing_shanxing"); if (null != efxObj) { efxObj.transform.rotation = m_actor.transform.rotation; efxObj.transform.localScale = new Vector3(param1, 1.0f, param1); } } else if (rangeType == (int)SkillRangeType.SKILL_SELF_RECT) { efxObj = CoreEntry.gGameObjPoolMgr.InstantiateEffect("Effect/skill/remain/fx_yujing_changfang"); if (null != efxObj) { efxObj.transform.rotation = m_actor.transform.rotation; efxObj.transform.localScale = new Vector3(param2, 1.0f, param1); } isRectWarning = true; } else if (rangeType == (int)SkillRangeType.SKILL_SELF_CIRCLE) { efxObj = CoreEntry.gGameObjPoolMgr.InstantiateEffect("Effect/skill/remain/fx_yujing_yuan"); if (null != efxObj) { efxObj.transform.localRotation = Quaternion.identity; efxObj.transform.localScale = new Vector3(param1 * 2.0f, 1.0f, param1 * 2.0f); } } } if (null == efxObj) { return; } efxObj.transform.position = pos; int delayTime = m_skilleffect.Get <int>("delay"); EfxAttachActionPool efx = efxObj.GetComponent <EfxAttachActionPool>(); if (efx == null) { efx = efxObj.AddComponent <EfxAttachActionPool>(); } if (efx != null) { efx.Init(null, delayTime * 0.001f + 0.5f); } Transform aniTransform = efxObj.transform.FindChild("liquan"); if (null != aniTransform) { if (isRectWarning) { aniTransform.localPosition = Vector3.zero; TweenPosition.Begin(aniTransform.gameObject, delayTime * 0.001f, Vector3.forward); } else { aniTransform.localScale = Vector3.zero; TweenScale.Begin(aniTransform.gameObject, delayTime * 0.001f, Vector3.one); } } }
public void Preload(ActorObj own, int skillID) { m_skillID = skillID; m_onlyShowSkillScope = true; m_actor = own; m_skillDesc = ConfigManager.Instance.Skill.GetSkillConfig(m_skillID); if (m_skillDesc == null) { return; } SkillClassDisplayDesc skillClass = m_gameDBMgr.GetSkillClassDisplayDesc(m_skillDesc.Get <int>("skillDisplayID")); if (skillClass == null) { return; } //吟唱阶段 for (int i = 0; i < skillClass.prepareStageDataList.Count; ++i) { GameObject cellObj = CoreEntry.gGameObjPoolMgr.InstantiateSkillCell(skillClass.prepareStageDataList[i].prefabPath); cellObj.transform.parent = transform; ISkillCell skillCell = cellObj.GetComponent <ISkillCell>(); skillCell.Preload(skillClass.prepareStageDataList[i], this); AddSkillCell(cellObj); } //技能元素 for (int i = 0; i < skillClass.castStageDataList.Count; ++i) { GameObject cellObj = CoreEntry.gGameObjPoolMgr.InstantiateSkillCell(skillClass.castStageDataList[i].prefabPath); if (cellObj == null) { LogMgr.UnityError("Can not found prefab: " + skillClass.castStageDataList[i].prefabPath + " ! of skillID " + skillClass.skillID + " : " + skillClass.castStageDataList[i].ToString()); continue; } cellObj.transform.parent = transform; ISkillCell skillCell = cellObj.GetComponent <ISkillCell>(); skillCell.Preload(skillClass.castStageDataList[i], this); AddSkillCell(cellObj); } // 动作特效加载 LuaTable skill_action = CoreEntry.gSkillMgr.GetSkillActon(skillID); if (skill_action != null && skill_action.Get <string>("skilleffect").Length > 0) { GameObject efxObj = CoreEntry.gGameObjPoolMgr.InstantiateEffect(skill_action.Get <string>("skilleffect")); if (efxObj != null) { CoreEntry.gGameObjPoolMgr.Destroy(efxObj); } else { LogMgr.LogError("can not find attackEfxPrefab path: " + skill_action.Get <string>("skilleffect")); } } // 受击特效加载 string pfx_hurt = m_skillDesc.Get <string>("pfx_hurt"); if (pfx_hurt.Length > 0) { GameObject efxObj = CoreEntry.gGameObjPoolMgr.InstantiateEffect(pfx_hurt); if (efxObj != null) { CoreEntry.gGameObjPoolMgr.Destroy(efxObj); } } DestroyEfx(); }
// Use this for initialization void Start() { CancelInvoke("Start"); if (m_skillBase == null || m_skillBase.m_actor == null) { return; } m_isHadLoadFrameStop = false; //yy test //LuaTable desc = ConfigManager.Instance.Skill.GetSkillConfig( m_skillBase.m_skillID ) ; ////伤害计算 //m_skillBase = this.transform.root.gameObject.GetComponent<SkillBase>(); if (m_skillBase.m_onlyShowSkillScope) { return; } //gamedb.SkillDesc skillDesc = m_skillBase.m_actor.GetCurSkillDesc(m_skillBase.m_skillID); //SkillClassDisplayDesc skillClass = m_gameDBMgr.GetSkillClassDisplayDesc(m_skillBase.m_skillID); //if (skillClass.damageList.Count <= m_dataIndex) //{ // return; //} //m_oneDamageInfo = skillDesc.astDamageCellArray[m_dataIndex]; //m_oneDamageInfo = skillClass.damageList[m_dataIndex]; if (m_oneDamageInfo == null) { return; } m_repeateKeep = m_oneDamageInfo.keepTime; float hitTime = m_oneDamageInfo.hitTime / m_skillBase.m_speed; //float endTime = (m_oneDamageInfo.keepTime * m_oneDamageInfo.damageDiff) / m_skillBase.m_speed; float delayTime = 0; float curTime = m_skillBase.GetCurActionTime(); //if (desc.attackAction.Length <1 ) // { // curTime = 0; //} //LogMgr.UnityLog("hitTime=" + hitTime + ", curTime=" + curTime + ", skillid=" + m_skillBase.m_skillID); if (m_skillBase.SkillOverTime < hitTime) { LogMgr.UnityError(string.Format("技能结束时间:{0} < 打击时间:{1} , 将引发释放不出来 的BUG skillID:{2}", m_skillBase.SkillOverTime, hitTime, m_skillBase.m_skillID)); } if (curTime >= hitTime) { CalculateDamage(); LogMgr.UnityLog("----curTime:" + curTime + " hitTime:" + hitTime); } else { delayTime = hitTime - curTime; Invoke("CalculateDamage", delayTime); } if (m_oneDamageInfo.isRepeatedly) { //Invoke("EndDamage", endTime); } }
//加载非主角 void LoadMonster() { OneZoneData zoneData = m_gameDBMgr.GetAimPosZoneData(m_curMonsterGroupId, m_sceneMgr.curOpenZoneID); if (zoneData == null) { LogMgr.UnityError("Load zoneData error. mapid:" + m_curMonsterGroupId + " zoneid:" + m_sceneMgr.curOpenZoneID); return; } //add by lzp SetGuidSkill(); StartLoadMonster(); //所有的种怪 SpawnMonster[] monsters = m_gameDBMgr.GetSpawnMonsterInfo(m_curMonsterGroupId); for (int i = 0; i < monsters.Length; ++i) { if (!monsters[i].enable) { continue; } if (CurMonsterWaveSeq != monsters[i].waveSequence) { continue; } Vector3 pos = monsters[i].pos; //是否当前区域怪 if (zoneData != null && m_isLoadZone) { if (pos.x < zoneData.startPos.x || pos.x > zoneData.endPos.x || pos.z < zoneData.startPos.z || pos.z > zoneData.endPos.z) { continue; } } //刷怪时间扰动,避免所有怪一起刷新动作太整齐的问题 if (m_curWaveTriggerInfo.turbulenceTime > 0f) { m_TurbulenceSpawnMonsters.Add(monsters[i]); } else { SpawnActor(monsters[i]); } } //发送怪物被加载完了 m_eventMgr.TriggerEvent(GameEvent.GE_EVENT_AFTER_MONSTER_LOADED, null); if (m_TurbulenceSpawnMonsters.Count > 0) { InvokeRepeating("TurbulenceSpawnMonster", Random.Range(0f, m_curWaveTriggerInfo.turbulenceTime / m_TurbulenceSpawnMonsters.Count), m_curWaveTriggerInfo.turbulenceTime / m_TurbulenceSpawnMonsters.Count); } //m_bCurWaveLoaded = true; if (m_bWaveLoop == false && IsLoopMonsterAllDeath() == false) { m_bWaveLoop = true; TriggerLoopWave(); } // 下一波怪在这波开始时延时刷新情况 if (IsOpenZoneFinalWaveMonster() == false && (GetNextWaveTrigType() == WTC_TYPE.LASTWAVEBEGAN || GetNextWaveTrigType() == WTC_TYPE.ZONE)) { CurMonsterWaveSeq++; UpdateWaveTriggerInfo(); //m_bCurWaveLoaded = false; if (m_curWaveTriggerInfo.trigType == (int)WTC_TYPE.LASTWAVEBEGAN) { if (m_curWaveTriggerInfo.arg1 > 0) { StartDelayLoadMonster(); Invoke("DelaySpawnMonster", m_curWaveTriggerInfo.arg1); } else { LoadMonster(); } } else if (m_curWaveTriggerInfo.trigType == (int)WTC_TYPE.ZONE) { m_bNeedCheckZone = true; SetMonsterTips(true); } } }
/// <summary> /// 展示掉落物品 /// </summary> /// <param name="monsterID"></param> /// <param name="position"></param> private void ShowDropItem(MsgData_sSceneObjectEnterItem itemStruct) { if (itemStruct.Owner != CoreEntry.gActorMgr.MainPlayer.ServerID) { return; } Vector3 position = CommonTools.ServerPosToClient(itemStruct.PosX, itemStruct.PosY); position.y = CommonTools.GetTerrainHeight(position); LuaTable itemCfg = null; LuaTable equipCfg = null; itemCfg = ConfigManager.Instance.BagItem.GetItemConfig(itemStruct.ConfigID); if (null == itemCfg) { equipCfg = ConfigManager.Instance.BagItem.GetItemConfig(itemStruct.ConfigID); } if (null == itemCfg && null == equipCfg) { LogMgr.UnityError("config error:id " + itemStruct.ConfigID + " no config data"); return; } string dmeshid = string.Empty; string itemName = string.Empty; int itemQuality = 0; if (null != itemCfg) { dmeshid = itemCfg.Get <string>("dmeshid"); itemName = itemCfg.Get <string>("name"); itemQuality = itemCfg.Get <int>("quality"); } else { if (equipCfg != null) { dmeshid = equipCfg.Get <string>("dmeshid"); itemName = equipCfg.Get <string>("name"); itemQuality = equipCfg.Get <int>("quality"); } } DropItemInfo dropItem = null; if (m_UnusedDropItemList.Count > 0) { dropItem = m_UnusedDropItemList[m_UnusedDropItemList.Count - 1]; m_UnusedDropItemList.RemoveAt(m_UnusedDropItemList.Count - 1); } else { dropItem = new DropItemInfo(); dropItem.dropItemObj = null; } dropItem.cfgID = itemStruct.ConfigID; dropItem.serverID = itemStruct.Guid; dropItem.count = itemStruct.Count; dropItem.dropPosition = position; string[] strs = dmeshid.Split('#'); if (strs == null || strs.Length != 2) { LogMgr.UnityError("item config error:" + itemStruct.ConfigID + ";" + dmeshid); return; } GenerateDropItem(dropItem.dropPosition, strs[1], itemQuality, ref dropItem); if (dropItem != null && dropItem.dropItem != null) { dropItem.dropItem.Init(dropItem.dropType, itemName, dropItem.count, strs[0], itemQuality); m_DropItemList.Add(dropItem); } }
//HashSet<int> m_errorSet = new HashSet<int>(); public void actorGameObjectListNullError(int index) { LogMgr.UnityError("actorGameObjectListNullError index:" + index); Invoke("DelayProcese_actorGameObjectListNullError", 0.001f); }