//int m_num = 1; //初始化 public void Init(GameObject obj) { m_actorObject = obj; //m_ani = m_actorObject.GetComponent<Animation>(); m_actor = (m_actorObject.GetComponent <ActorObj>()); m_transform = m_actorObject.transform; m_animationCurveData = m_actorObject.GetComponent <AnimationCurveData>(); if (m_animationCurveData == null) { //LogMgr.LogError(obj.name + ":缺少动画曲线组件AnimationCurveData,可能将导致异常。美术请检查该模型!!!"); } if (m_actor != null && m_actor != null) { m_curRadius = m_actor.GetColliderRadius(); } else { LogMgr.LogError("Please Check m_actor:" + m_actor + " : " + m_actor); } //如果是PVP状态 if (CoreEntry.gGameMgr.IsPvpState()) { m_curRadius += 1.8f; } }
/// <summary> /// 初始化背包。 /// </summary> /// <param name="result">服务器下发信息。</param> public void Init(MsgData_sQueryItemResult result) { mID = result.ID; mBagType = result.Bag; mSize = result.Size; OpenLastTime = result.OpenLastTime; mItemInfos.Clear(); for (int i = 0; i < result.ItemInfoList.Count; ++i) { ItemInfo info = ItemInfo.GetItemInfoClass(mBagType); info.Init(result.ItemInfoList[i]); if (ConfigManager.Instance.BagItem.GetItemConfig(info.ID) != null) { if (!mItemInfos.ContainsKey(info.Pos)) { mItemInfos.Add(info.Pos, info); } else { LogMgr.LogError("格子已有物品 bag:{0} pos:{1}", info.Bag, info.Pos); } } else { LogMgr.LogError("物品配置不存在 bag:{0} pos:{1} id:{2}", info.Bag, info.Pos, info.ID); } } }
public void Cache(T obj) { if (obj == null) { return; } if (m_CacheObjects.Contains(obj)) { #if UNITY_EDITOR LogMgr.LogError("重复回收"); #endif return; } obj.OnRecycle(); if (m_CacheObjects.Count < m_Size) { m_CacheObjects.Push(obj); } else { obj.OnRelease(); #if UNITY_EDITOR //LogMgr.LogWarning("The cache pool is full and the obj has be release. Size:{0}", m_Size); #endif } }
void Print1() { { var r = ProfilerData.GetLuaSrcResMem(); LogMgr.LogError("lua文件数 : " + r.count + ", 内存 : " + r.MB + " MB"); LogMgr.LogError("lua总内存 : " + ProfilerData.GetLuaRuntimeMem() + " MB"); } { var r = ProfilerData.GetMemByType <TextAsset>((a) => { return(ProfilerData.IsLua(a.name)); }); LogMgr.LogError("### 实际 lua文件数 : " + r.count + ", 内存 : " + r.MB + " MB"); } { HashSet <string> set = new HashSet <string>(); var r = ProfilerData.GetMemByType <TextAsset>((a) => { var ln = a.name.ToLower(); if (set.Contains(ln)) { return(false); } set.Add(ln); return(ln.Contains(".lua")); }); LogMgr.LogError("### 实际 lua文件数 2 : " + r.count + ", 内存 : " + r.MB + " MB"); } { var r = ProfilerData.GetCSVResMem(); LogMgr.LogError("csv文件数 : " + r.count + ", 内存 : " + r.MB + " MB"); } { nameSet.Clear(); var r = ProfilerData.GetMemByType <TextAsset>((a) => { if (nameSet.Contains(a.name.ToLower())) { return(false); } nameSet.Add(a.name.ToLower()); return(ProfilerData.IsCSV(a.name)); }); LogMgr.LogError("### 实际 csv文件数 : " + r.count + ", 内存 : " + r.MB + " MB"); } { var r = ProfilerData.GetMemByType <Texture>((a) => { return(!string.IsNullOrEmpty(a.name)); }); LogMgr.LogError("纹理数 : " + r.count + ", 纹理内存 : " + r.MB + " MB"); } }
/// <summary> /// 场景中加载怪物模型(单个添加) /// </summary> /// <returns>The load point.</returns> /// <param name="info">Info.</param> /// <param name="index">Index.</param> /// <param name="callback">Callback.</param> public void SceneLoadPoint(MonsterType type, MonsterInfo info, int index) { if (mapId == 0) { LogMgr.LogError("请先选择地图!"); return; } if (!parentObj.ContainsKey(type) || parentObj[type] == null) { GameObject p = (GameObject)UnityEngine.Object.Instantiate(CoreEntry.gResLoader.Load(_parentPrefab)); p.name = parentStr[type]; p.transform.position = Vector3.zero; parentObj[type] = p; } MonsterItem tt = new MonsterItem(); if (!items.ContainsKey(type)) { items[type] = new Dictionary <int, GameObject>(); } if (items[type].ContainsKey(info.index)) { tt = items[type][info.index].GetComponent <MonsterItem>(); tt.SetV(info); } else { GameObject obj = (GameObject)Instantiate(CoreEntry.gResLoader.Load(_itemPrefab)); obj.name = info.name.ToString(); tt = obj.GetComponent <MonsterItem>(); obj.transform.parent = parentObj[type].transform; tt.RefreshData(info); items[type][info.index] = obj; } // if (!items.ContainsKey(type)) // { // items[type] = new List<GameObject>(); // } //if (items[type].Count >= index + 1) { // tt = items[type][index].GetComponent<MonsterItem>(); // tt.SetV(info[index]); //} else { // GameObject obj = (GameObject)UnityEngine.Object.Instantiate(Resources.Load(itemStrPath[type])); // obj.name = index.ToString(); // tt = obj.GetComponent<MonsterItem>(); // obj.transform.parent = parentObj[type].transform; // tt.RefreshData(info[index]); // items[type].Add(obj); //} // tt.gameObject.name = item.Value[i].name; // return info [index]; }
/// <summary> /// 播放过场。 /// </summary> /// <param name="path">过场动画路径。</param> public void TryPlayerCutScene(LuaTable cfg) { //上一个动画还未结束 if (Time.realtimeSinceStartup < m_LastPlayStopTime) { return; } //首次播放检查 int id = cfg.Get <int>("id"); if (cfg.Get <int>("time") == TRIGGER_TIME_ONCE) { if (IsHavePlay(id)) { return; } else { SetHavePlay(id); } } //播放动画 GameObject prefab = (GameObject)CoreEntry.gResLoader.Load(cfg.Get <string>("animation"), typeof(GameObject)); if (prefab == null) { LogMgr.LogError("加载过场动画失败 path:{0}", cfg.Get <string>("animation")); return; } GameObject obj = GameObject.Instantiate(prefab) as GameObject; USSequencer us = obj.GetComponent <USSequencer>(); if (us == null) { LogMgr.LogError("播放场动画失败,未找到USSequencer组建 path:{0}", cfg.Get <string>("animation")); return; } us.PlaybackFinished += OnAniEnd; m_CurID = id; OnAniStart(us); //保存结束时间,在次期间不再播动画 float duration = 0; AutoDestroy ad = obj.GetComponent <AutoDestroy>(); if (ad != null) { duration = ad.Delay; } m_LastPlayStopTime = Time.realtimeSinceStartup + duration; #if UNITY_EDITOR LogMgr.Log("播放过场动画 duration:{0} path:{1}", duration, cfg.Get <string>("animation")); #endif }
// public void onConnected(bool isSuccessfull, IPEndPoint remote) { if (isSuccessfull == false) { LogMgr.LogError("===== connect server failed !!! " + m_page + " address:" + remote.ToString()); } else { LogMgr.UnityLog("===== connect server success !!! " + m_page + " address:" + remote.ToString()); } }
public void onConnectedError(int errorCode) { if (!bReconnect)//重连状态下 { if (errorCode == 10051 && MapMgr.Instance.CurMapType != MapMgr.MapType.Map_Login && MapMgr.Instance.CurMapType != MapMgr.MapType.Map_None) { LogMgr.LogError("onConnectedError : StartReconnect"); StartReconnect(); IsShowReconnectedDialog = false; } } }
Object getJiaoYin() { if (m_jiaoYinPrefab == null) { m_jiaoYinPrefab = CoreEntry.gResLoader.LoadResource("Effect/scence/sf_jiaoyin"); } if (m_jiaoYinPrefab == null) { LogMgr.LogError("找不到 prefab: " + "Effect/scence/sf_jiaoyin"); } return(m_jiaoYinPrefab); }
void AutoExitState() { LogMgr.LogError("DizzState, AutoExitState"); CancelInvoke("ExitBehitState"); CancelInvoke("AutoExitState"); m_isNonControl = false; StateParameter param = new StateParameter(); param.state = ACTOR_STATE.AS_STAND; m_actor.RequestChangeState(param); }
/// <summary> /// 服务器通知:圣盾换模型结果 msgId:8725 /// </summary> /// <param name="ge"></param> /// <param name="parameter"></param> private void OnPiFengChangeModel(GameEvent ge, EventParameter parameter) { MsgData_sPiFengChangeModel resp = parameter.msgParameter as MsgData_sPiFengChangeModel; if (resp.result == 0) { LogMgr.LogError("更换成功 " + resp.result); } else { LogMgr.LogError("更换失败 " + resp.result); } }
public void TriggerEvent(int ge, EventParameter parameter) { //将事件响应队列复制一个副本,因为事件在响应的过场中有可能会改变响应列表 List <EventNode> list; if (!eventMap.TryGetValue(ge, out list)) { if (parameter != null && parameter.autoRecycle) { EventParameter.Cache(parameter); } return; } //有可能在触发的过程中重复调用TriggerEvent,所以列表副本不能共享一下,需要动态创建 Triggerlist triggerlist = m_CacheTriggerlist.Get(); triggerlist.Nodes.AddRange(list); //逐个触发 for (int i = 0; i < triggerlist.Nodes.Count; i++) { EventNode node = triggerlist.Nodes[i]; try { node.Trigger(ge, parameter); } catch (MissingReferenceException e) { //如果向一个已经被销毁的对象发送消息,则清除之 list.Remove(node); #if UNITY_EDITOR LogMgr.LogError(e.ToString()); #endif } } m_CacheTriggerlist.Cache(triggerlist); if (parameter != null && parameter.autoRecycle) { EventParameter.Cache(parameter); } // 切换场景时移除相关的监听对象 if (ge == (int)GameEvent.GE_BEFORE_LOADSCENE) { OnLoadSceneRecycle(); } }
/// <summary> /// 索引值, 类型 /// </summary> /// <param name="index"></param> /// <param name="type"></param> public void SelectionTypeObj(int index, MonsterType type) { if (items.ContainsKey(type) && items[type].ContainsKey(index)) { GameObject t = items[type][index]; t.name = t.GetComponent <MonsterItem>().info.name; // LogMgr.LogError("t.name " + t.name); EditorGUIUtility.PingObject(t); Selection.activeGameObject = t; // t.GetComponent<MonsterItem>().ChangeModelShow(); } else { LogMgr.LogError("search false"); } }
public bool bindMsgExHandler(Int16 cmd, MsgExHandler handler) { MsgExHandler handlerEvent; if (msgExHandlers.TryGetValue(cmd, out handlerEvent)) { #if UNITY_EDITOR LogMgr.LogError("网络扩展消息处理重复注册:{0}", cmd); #endif return(false); } else { msgExHandlers.Add(cmd, handler); return(true); } }
public void OnGetWaBaoReward(GameEvent ge, EventParameter parameter) { LogMgr.LogError("receive GetWaBaoReward"); MsgData_sGetWaBaoReward resp = parameter.msgParameter as MsgData_sGetWaBaoReward; if (resp.result == 0) { MsgData_sBossWabaoList tt = new MsgData_sBossWabaoList(); tt.bossId = resp.bossId; tt.num = resp.num; wabaoList[tt.bossId] = tt; } else { LogMgr.LogError("探宝失败"); } CoreEntry.gEventMgr.TriggerEvent(GameEvent.GE_CC_WorldBossGetReward, parameter); }
/// <summary> /// 场景中删除模型。。。。 /// </summary> /// <returns>The load point.</returns> /// <param name="info">Info.</param> /// <param name="index">Index.</param> /// <param name="callback">Callback.</param> public void SceneDelePoint(int index, MonsterType tp) { if (!items.ContainsKey(tp)) { LogMgr.LogError("类型错误"); return; } if (items[tp].ContainsKey(index)) { LogMgr.Log("已删除 " + index); GameObject t = items[tp][index]; DestroyImmediate(t); items[tp].Remove(index); } else { LogMgr.LogError("找不到 " + index); } }
/// <summary> /// 使用属性丹。 /// </summary> /// <param name="data">网络消息数据。</param> private void OnUseAttrDan(MsgData data) { MsgData_sUseAttrDan info = data as MsgData_sUseAttrDan; LogMgr.LogError(string.Format("OnUseAttrDan type:{0} result:{1} pillnumber:{2}", info.Type, info.Result, info.PillNumber)); if (info.Result == 0) { if (info.Type == AttrDanType.Ride) { mPillNum = info.PillNumber; TriggerEventRideUseAttrDan(info.Type); } else if (info.Type == AttrDanType.RidePer) { mPillNumPercent = info.PillNumber; TriggerEventRideUseAttrDan(info.Type); } } }
protected override void Main() { LogMgr.UnityLog("NetMgr.ReceiverThread.Main: Begin"); while (!IsTerminateFlagSet()) { try { ReadFromStream(); ScanPackets(); } catch (Exception e) { LogMgr.LogError("rcv thread error:" + e); } } LogMgr.UnityLog("NetMgr.ReceiverThread.Main: End"); }
public static void CreateMagicKey(ActorObj attackObj, int skillID) { GameObject efxObj = null; LuaTable skill_action = CoreEntry.gSkillMgr.GetSkillActon(skillID); if (skill_action != null) { object obj = CoreEntry.gResLoader.LoadResource(skill_action.Get <string>("skilleffect")); if (obj == null) { LogMgr.LogError("找不到attackEfxPrefab:" + skill_action.Get <string>("skilleffect")); } efxObj = Instantiate((GameObject)obj) as GameObject; //CoreEntry.gGameObjPoolMgr.InstantiateEffect(param.actionEfx); if (efxObj != null) { efxObj.transform.parent = attackObj.transform; efxObj.transform.localPosition = Vector3.zero; //efxObj.transform.localRotation = Vector3.zero; efxObj.transform.localScale = Vector3.one; } } if (efxObj != null) { SkillMagicKeyBase mk = efxObj.GetComponent <SkillMagicKeyBase>(); if (mk == null) { mk = efxObj.AddComponent <SkillMagicKeyBase>(); } mk.Init(attackObj, skillID); } LuaTable skillCfg = ConfigManager.Instance.Skill.GetSkillConfig(skillID); if (null != skillCfg && skillCfg.Get <int>("showtype") == (int)SkillShowType.ST_MAGICKEY) { EventParameter param = EventParameter.Get(); param.intParameter = skillCfg.Get <int>("showtype"); param.stringParameter = skillCfg.Get <string>("name"); CoreEntry.gEventMgr.TriggerEvent(GameEvent.GE_FLY_SKILL, param); } }
//打开文件 public bool OpenXml(string filePath) { XmlDocument xmlDoc = new XmlDocument(); //Object fileByte = Resources.Load(filePath); TextAsset fileByte = CoreEntry.gResLoader.LoadTextAsset(filePath, SenLib.AssetType.Xml); //(TextAsset)CoreEntry.gResLoader.Load(filePath, typeof(TextAsset), 11); if (fileByte == null) { LogMgr.UnityLog("Error 加载XML 失败: " + filePath); return(false); } Encoding utf8NoBom = new UTF8Encoding(false); //StringBuilder builder = new StringBuilder(); //builder.Append(utf8NoBom.GetString(fileByte.bytes, 0, fileByte.bytes.Length )); //builder.Append("\n\n"); string strXml = utf8NoBom.GetString(fileByte.bytes, 0, fileByte.bytes.Length); //string strXml =builder.ToString(); //Encoding encoding = Encoding.UTF8; //Encoding.ASCII;// //StreamReader sr = new StreamReader(new MemoryStream(fileByte.bytes), encoding); try { xmlDoc.LoadXml(strXml); } catch (System.Exception e) { LogMgr.LogError("error! load XML path:" + filePath + " \n" + e); return(false); } //调整filepath,绝对路径 m_filePath = Application.dataPath + @"/ResData/" + filePath + @".xml"; m_xmlDoc = xmlDoc; return(true); }
//private int type; public LineFormula(Node start, Node end, int type) { //this.type = type; if (start.position.x == end.position.x) { if (type == 1) { a = 0; b = start.position.x; } else { LogMgr.LogError("LineFormula error"); } } else if (start.position.y == end.position.y) { if (type == 0) { a = 0; b = start.position.y; } else { LogMgr.LogError("LineFormula error"); } } else { if (type == 0) { a = (end.position.y - start.position.y) / (end.position.x - start.position.x); b = start.position.y - a * start.position.x; } else if (type == 1) { a = (end.position.x - start.position.x) / (end.position.y - start.position.y); b = start.position.x - a * start.position.y; } } }
void Awake() { m_ch = this.GetComponent <CharacterController>(); m_transform = this.transform; if (fx_renwuzhixiang == null) { Object obj = CoreEntry.gResLoader.Load("Effect/skill/remain/fx_jiaodiguanghuan"); if (obj == null) { LogMgr.LogError("找不到 prefab: " + "Effect/skill/remain/fx_jiaodiguanghuan"); return; } fx_renwuzhixiang = GameObject.Instantiate(obj) as GameObject; fx_renwuzhixiang.transform.parent = gameObject.transform; fx_renwuzhixiang.transform.localPosition = new Vector3(0.0f, 0.1f, 0.0f); fx_renwuzhixiang.transform.localRotation = Quaternion.identity; fx_renwuzhixiang.SetActive(true); } }
public void InitPlayer() { //初始化 base.Init(); //for debug this.SetIdFlag(1); //加载行为树 if (m_behaviorTree.Length > 0) { m_btLoadResult = btload(m_behaviorTree, true); if (m_btLoadResult) { btsetcurrent(m_behaviorTree); } else { LogMgr.LogError("load bt tree failed! " + m_behaviorTree); } } }
//移动 public override void MovePos(Vector3 pos) { if (m_agent == null) { LogMgr.LogError("NavMeshAgent is null"); return; } m_agent.enabled = true; if (!m_agent.gameObject.activeSelf) { return; } bool bRet = m_agent.SetDestination(pos); if (!bRet) { NavMeshHit hit; if (NavMesh.SamplePosition(transform.position, out hit, 100.0f, -1)) { pos.y = hit.position.y; } } m_dstPos = pos; //开始移动 EventParameter param = EventParameter.Get(); param.goParameter = this.gameObject; m_eventMgr.TriggerEvent(GameEvent.GE_PLAYER_MOVE_BEGIN, param); //0.01秒后开始计算距离 Invoke("BeginRun", 0.01f); }
/// <summary> /// 触摸拖拽。 /// </summary> /// <param name="data">触摸数据。</param> public void OnDrag(BaseEventData data) { LogMgr.LogError("OnDrag ..."); //取消点击的判断距离 PointerEventData ped = data as PointerEventData; if (m_CheckClick) { if ((ped.position - m_TouchPosition).sqrMagnitude >= CancelClickDistance * CancelClickDistance) { m_CheckClick = false; } } #if UNITY_EDITOR if (!m_CheckClick) { Vector2 delta = ped.delta; if (Input.GetKey(KeyCode.S)) { //缩放 float d = (delta.x + delta.y) / 2; Scale(d); } else if (Input.GetKey(KeyCode.D)) { //平移 Move(delta.x, delta.y); } else { //旋转 Rotate(delta.x, delta.y); } } #endif }
public void OnActivityFinish(GameEvent ge, EventParameter parameter) { LogMgr.LogError("receive ActivityFinish"); }
void UpdateSkillIcon() { if ((int)enSkillIndex.Player_Skill_Beauty == buttonindex) { //Configs.changeConfig changCfg = CSVConfigManager.GetchangeConfig(skillID); LuaTable changeCfg = ConfigManager.Instance.Actor.GetChangeConfig(skillID); if (changeCfg != null) { BeautyChangeTime = changeCfg.Get <float>("time"); } GetHeroChangeTime fun = LuaMgr.Instance.GetLuaEnv().Global.GetInPath <GetHeroChangeTime>("ModelManager.HeroModel.GetHeroChangeTime"); if (fun != null) { BeautyChangeTime = BeautyChangeTime + fun(); } } string sIconName = GetSkillIcon(skillID); if (sIconName != null) { m_ImageSkillIcon.sprite = AtlasSpriteManager.Instance.GetSprite(sIconName); m_ImageSkillIcon.enabled = true; } else { LogMgr.LogError("技能没找到图标 skillID:" + skillID); //m_ImageDisable.gameObject.SetActive(true); m_ImageSkillIcon.gameObject.SetActive(false); } skillDesc = ConfigManager.Instance.Skill.GetSkillConfig(skillID); if (m_ImageDisable != null && (buttonindex <= (int)enSkillIndex.Beauty_att || buttonindex > (int)enSkillIndex.Player_Skill4)) { m_ImageDisable.gameObject.SetActive(false); if (EnergyBall != null) { EnergyBall.gameObject.SetActive(true); } } //重新更新技能CD时间 if (CoreEntry.gActorMgr.MainPlayer.IsInCoolDownTime(skillID) == true) // { if (m_ImageCD != null) { m_ImageCD.enabled = true; } if (m_TextCDCountDown != null) { m_TextCDCountDown.enabled = true; } } else { fBeginTime = 0; fDurTime = 0; totalTime = 0.0f; bCDCool = false; m_ImageCD.fillAmount = 1f; if (EnergyBallMaterial != null) { EnergyBallMaterial.material.SetFloat("_offect", 1); } if (buttonindex != (int)enSkillIndex.Player_Skill_Beauty) { m_ImageCD.enabled = false; m_TextCDCountDown.enabled = false; } } }
private void OnEnterScene(GameEvent ge, EventParameter parameter) { NetReadBuffer buffer = parameter.objParameter as NetReadBuffer; CacheEnterHead.unpack(buffer); buffer.pos = 0; //重新给具体类型的消息读取 if (CacheEnterHead.ObjType == (sbyte)EnEntType.EnEntType_Player)//其它玩家 { MsgData_sSceneObjectEnterHuman humanStruct = new MsgData_sSceneObjectEnterHuman(); humanStruct.unpack(buffer); //队友一定创建 bool inteam = PlayerData.Instance.TeamData.IsInTeam(humanStruct.Guid); int num = inteam ? 0 : (CoreEntry.gActorMgr.GetAllPlayerActors().Count - 1 + GetCacheNumber(EnEntType.EnEntType_Player)); if (num < CreateMaxPlayer) { CacheSceneObj(EnEntType.EnEntType_Player, humanStruct.Guid, humanStruct); } else { ScenePlayerData playerdata = new ScenePlayerData(); playerdata.EnterData = humanStruct; if (!mBackgroundPlayer.ContainsKey(playerdata.Guid)) { mBackgroundPlayer.Add(playerdata.Guid, playerdata); } else { LogMgr.LogError("玩家已经在缓存中 guid:{0}", playerdata.Guid); } } } else if (CacheEnterHead.ObjType == (sbyte)EnEntType.EnEntType_Monster)//怪物 { MsgData_sSceneObjectEnterMonster monsterStruct = new MsgData_sSceneObjectEnterMonster(); monsterStruct.unpack(buffer); if (CoreEntry.gCurrentMapDesc.Get<int>("type") == 31) //幻灵副本 ,延时刷怪 { DungeonMgr.Instance.AddMonster(monsterStruct); } else { CacheSceneObj(EnEntType.EnEntType_Monster, monsterStruct.Guid, monsterStruct); } } else if (CacheEnterHead.ObjType == (sbyte)EnEntType.EnEntType_NPC)//NPC { MsgData_sSceneObjectEnterNPC npcStruct = new MsgData_sSceneObjectEnterNPC(); npcStruct.unpack(buffer); CacheSceneObj(EnEntType.EnEntType_NPC, npcStruct.Guid, npcStruct); } else if (CacheEnterHead.ObjType == (sbyte)EnEntType.EnEntType_Item)//物品 { MsgData_sSceneObjectEnterItem itemStruct = new MsgData_sSceneObjectEnterItem(); itemStruct.unpack(buffer); if (itemStruct.Owner == PlayerData.Instance.RoleID) { CacheSceneObj(EnEntType.EnEntType_Item, itemStruct.Guid, itemStruct); EventParameter ep = EventParameter.Get(); ep.intParameter = itemStruct.ConfigID; ep.intParameter1 = itemStruct.Count; ep.longParameter = itemStruct.Source; CoreEntry.gEventMgr.TriggerEvent(GameEvent.GE_ITEM_DROP, ep); } } else if (CacheEnterHead.ObjType == (sbyte)EnEntType.EnEntType_GatherObj) { MsgData_sSceneObjectEnterCollection collectionStruct = new MsgData_sSceneObjectEnterCollection(); collectionStruct.unpack(buffer); CacheSceneObj(EnEntType.EnEntType_GatherObj, collectionStruct.Guid, collectionStruct); } else if (CacheEnterHead.ObjType == (sbyte)EnEntType.EnEntType_Trap)//陷阱 { MsgData_sSceneObjectEnterTrap trapStruct = new MsgData_sSceneObjectEnterTrap(); trapStruct.unpack(buffer); CacheSceneObj(EnEntType.EnEntType_Trap, trapStruct.Guid, trapStruct); } else if (CacheEnterHead.ObjType == (sbyte)EnEntType.EnEntType_Pet) { MsgData_sSceneObjectEnterPet petStruct = new MsgData_sSceneObjectEnterPet(); petStruct.unpack(buffer); CacheSceneObj(EnEntType.EnEntType_Pet, petStruct.Guid, petStruct); } else if (CacheEnterHead.ObjType == (sbyte)EnEntType.EnEntType_BiaoChe) { MsgData_sSceneObjectEnterBiaoChe cheStruct = new MsgData_sSceneObjectEnterBiaoChe(); cheStruct.unpack(buffer); CacheSceneObj(EnEntType.EnEntType_BiaoChe, cheStruct.Guid, cheStruct); } else if (CacheEnterHead.ObjType == (sbyte)EnEntType.EnEntType_StaticObj)//Portal { MsgData_sSceneObjectEnterStaticObj sstaticStruct = new MsgData_sSceneObjectEnterStaticObj(); sstaticStruct.unpack(buffer); CacheSceneObj(EnEntType.EnEntType_StaticObj, sstaticStruct.Guid, sstaticStruct); } else if (CacheEnterHead.ObjType == (sbyte)EnEntType.EntType_VirtualPlayer)//EntType_VirtualPlayer { MsgData_sSceneObjectEnterVirtualPlayer sstaticStruct = new MsgData_sSceneObjectEnterVirtualPlayer(); sstaticStruct.unpack(buffer); //Debug.LogError(sstaticStruct.Guid+" " + sstaticStruct.HP+" " +sstaticStruct.Level + " "+sstaticStruct.Power+" " +sstaticStruct.Wing); CacheSceneObj(EnEntType.EntType_VirtualPlayer, sstaticStruct.Guid, sstaticStruct); } //下方的游戏中还没用到,就不改了,减少被没必要的GC,以后需要可参照上方定义协议数据后使用 //else if (baseStruct.ObjType == (sbyte)EnEntType.EnEntType_Patrol) //{ // PatrolEnterStruct patrolStruct = new PatrolEnterStruct(); // PacketUtil.Unpack<PatrolEnterStruct>(data.Data, out patrolStruct); //} //else if (baseStruct.ObjType == (sbyte)EnEntType.EnEntType_Duke) //{ // DukeEnterStruct dukeStruct = new DukeEnterStruct(); // PacketUtil.Unpack<DukeEnterStruct>(data.Data, out dukeStruct); //} //else if (baseStruct.ObjType == (sbyte)EnEntType.EnEntType_BiaoChe) //{ // BiaoCheEnterStruct biaocheStruct = new BiaoCheEnterStruct(); // PacketUtil.Unpack<BiaoCheEnterStruct>(data.Data, out biaocheStruct); //} }
//播放动画,特效,声音 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); }
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(); }