/// <summary> /// 添加怪物数据 /// </summary> /// <returns></returns> public Monsterdata Adddata() { Monstergroupdata = new Monsterdata(); Monstergroupdata.MonsterPointdataList = new List <MonsterPointData>(); Monstergroupdata.MonsterPointdataList = MonsterPointdataList; Monstergroupdata.EnterWaitTime = EnterWaitTime; Monstergroupdata.MyPos = this.transform.position; Monstergroupdata.MyAngle = this.transform.rotation; return(Monstergroupdata); }
/// <summary> /// 开启出生怪物行为 /// </summary> /// <param name="obj">怪物Obj</param> /// <param name="data">怪物数据</param> /// <param name="isLocal">是否本地加载</param> public void SetMonsterBirthState(GameObject obj, Monsterdata data, bool isLocal, int DynamicID = 0) { StoryAnimEditorContrler.GetInst().SetMonsterBirthState(obj, data, isLocal, DynamicID); StoryAnimEditorContrler.GetInst().GetMonsterObjList().Add(obj); }
/// <summary> /// 开启出生怪物行为 /// </summary> /// <param name="obj">怪物Obj</param> /// <param name="data">怪物数据</param> /// <param name="isLocal">是否本地加载</param> public void SetMonsterBirthState(GameObject obj, Monsterdata data, bool isLocal, int DynamicID = 0) { StartCoroutine(StartMonsterBirth(obj, data, isLocal, DynamicID)); }
//############################################################################################################################## //怪物出生模式 private IEnumerator StartMonsterBirth(GameObject obj, Monsterdata data, bool isLocal, int DynamicID = 0) { yield return(new WaitForSeconds(data.EnterWaitTime)); //TODO::怪物出场特效,这里临时这么写; isLocal = true; Animation anim = obj.GetComponent <Animation>(); for (int i = 0; i < data.MonsterPointdataList.Count; ++i) { //选择动作播放循环播放动作 switch (data.MonsterPointdataList[i].MonsterActiontype) { case MonsterActionType.Loop: anim.wrapMode = WrapMode.Loop; break; case MonsterActionType.Once: anim.wrapMode = WrapMode.Once; break; } if (data.MonsterPointdataList[i].ActionName != string.Empty) { anim.CrossFade(data.MonsterPointdataList[i].ActionName, 0.2f); } //加载特效 if (data.MonsterPointdataList[i].Effname != string.Empty) { //不填的默认为特效位置为当前object的位置; Vector3 effPos = data.MonsterPointdataList[i].Effpos.Equals(Vector3.zero) ? obj.transform.position : data.MonsterPointdataList[i].Effpos; if (!isLocal) { //正常加载特效 GameObject objType = AssetLoader.Inst.GetAssetRes(data.MonsterPointdataList[i].Effname); //GameObject eff = Instantiate(objType, data.MonsterPointdataList[i].Effpos, Quaternion.identity) as GameObject; GameObject eff = Instantiate(objType, effPos, Quaternion.identity) as GameObject; Destroy(eff, data.MonsterPointdataList[i].EffTime); } else { //本地加载特效 //GameObject eff = Instantiate(Resources.Load(data.MonsterPointdataList[i].Effname), data.MonsterPointdataList[i].Effpos, Quaternion.identity) as GameObject; GameObject eff = Instantiate(Resources.Load(data.MonsterPointdataList[i].Effname), effPos, Quaternion.identity) as GameObject; Destroy(eff, data.MonsterPointdataList[i].EffTime); } } //播放音效 if (data.MonsterPointdataList[i].Soundname != null || data.MonsterPointdataList[i].Soundname != string.Empty) { string _audio = data.MonsterPointdataList[i].Soundname; if (!isLocal) { //正常播放音效 AudioControler.Inst.PlaySound(_audio); } else { //... } } //选择行为模式 switch (data.MonsterPointdataList[i].Entertype) { case MonsterEnterType.StayIdle: obj.transform.DOPause(); break; case MonsterEnterType.RunAround: if (data.MonsterPointdataList[i].IsMovetoFirstPoint == true) { obj.transform.position = data.MonsterPointdataList[i].RunAroundPoints[0]; } RunAroundUpdate(obj, data.MonsterPointdataList[i], data.MonsterPointdataList[i].RunAroundPoints); break; case MonsterEnterType.Bench: SceneObjectManager.GetInstance().SceneObjectAddMonster(obj, CurrentFightCount, DynamicID); // For Blood Create(by zcd) GameEventDispatcher.Inst.dispatchEvent(GameEventID.F_OnSupportMonstorBlood); break; case MonsterEnterType.StayRun: //.. break; case MonsterEnterType.DesMySelf: Dic_GameobjList.Remove(obj); Destroy(obj); break; default: Debug.Log("无行为"); break; } //等待当前行为时间 yield return(new WaitForSeconds(data.MonsterPointdataList[i].ActionTime)); } }