/// <summary> /// 创建动作特效 /// </summary> /// <param name="actionID"></param> /// <param name="npcID"></param> public void CreateActionEffect(int actionID, int npcID) { StroyActionConfigData actionData = StroyLineConfigManager.Instance.GetStroyActionConfig[actionID]; Transform npcTrans; if (StroyLineDataManager.Instance.GetNpcList.ContainsKey(npcID)) { npcTrans = StroyLineDataManager.Instance.GetNpcList[npcID].transform; } else { return; } Vector3 startPos = npcTrans.TransformPoint(actionData._EffectPosition.z, npcTrans.localPosition.y + actionData._EffectPosition.y, actionData._EffectPosition.x); //配置表中的X对应3D中的Z,z对应3D中和X, if (actionData._EffectGo == null) { return; } GameObject actionEffect = GameObjectPool.Instance.AcquireLocal(actionData._EffectGo, startPos, Quaternion.Euler(0, actionData._EffectStartAngle, 0));//Quaternion.Euler(0, rotationY, 0)); var childs = actionEffect.GetChildTransforms(); childs.ApplyAllItem(P => P.gameObject.layer = 30); StroyActionEffect actionEffectBehaviour = actionEffect.GetComponent <StroyActionEffect>(); if (actionEffectBehaviour == null) { actionEffectBehaviour = actionEffect.AddComponent <StroyActionEffect>(); } actionEffectBehaviour.InitDataConfig(actionData._EffectLoopTimes); }
void OkEvent(GameObject go) { HidePanel(); switch (m_createType) { case CreateType.STROYLINE: StroyLineConfigData stroyline = new StroyLineConfigData(); CreateStroyLine(stroyline); break; case CreateType.ACTION: StroyActionConfigData actionData = new StroyActionConfigData(); CreateStroyAction(actionData); break; case CreateType.CAMERACLIP: StroyCameraConfigData cameraData = new StroyCameraConfigData(); CreateStroyCameraClip(cameraData); break; default: break; } HidePanel(); }
public void SetActionUiState(StroyActionConfigData actionData) { m_winType = WinType.ActionParams; m_actionData = actionData; m_curTitleName = "新建动作窗口"; m_isNewCreate = true; m_isShowWindow = true; tooltip = ""; }
public StroyActionConfigData Clone() { StroyActionConfigData tempObj = (StroyActionConfigData)this.MemberwiseClone(); if (_EffectGo != null) { tempObj._EffectGo = this._EffectGo; } return(tempObj); }
private void AddSaveAction(StroyActionConfigData actionData) { if (actionData == null) { return; } for (int i = 0; i < EditorDataManager.Instance.StroyActionTempData.Count; i++) { if (EditorDataManager.Instance.StroyActionTempData[i]._ActionID == actionData._ActionID) { EditorDataManager.Instance.StroyActionTempData.RemoveAt(i); } } EditorDataManager.Instance.StroyActionTempData.Add(actionData); }
void CreateStroyAction(StroyActionConfigData actionData) { actionData._ActionID = 0; actionData._ActionName = "0"; actionData._ActionType = 0; actionData._Acceleration = 0; actionData._Duration = 0; actionData._EffectGo = GameObject.CreatePrimitive(PrimitiveType.Sphere); actionData._EffectLoopTimes = 0; actionData._EffectPosition = Vector2.zero; actionData._EffectStartTime = 0; actionData._SoundName = "0"; actionData._SoundTime = 0; actionData._Speed = 0; actionData._StartAngle = 0; actionData._StartPosition = Vector3.zero; StroyEditorUIManager.Instance.SetActionUiState(actionData); }
/// <summary> /// 回退函数 /// </summary> /// <param name="camera">要回退的镜头数据</param> /// <param name="action">要回退的动作数据</param> public void RestorePreStep(ref StroyCameraConfigData camera, ref StroyActionConfigData action) { int cameraCount = m_cameraList.Count - 2; if (cameraCount >= 0) { camera._ActionTime = m_cameraList[cameraCount]._ActionTime; camera._TargetID = m_cameraList[cameraCount]._TargetID; camera._TargetPos = m_cameraList[cameraCount]._TargetPos; camera._TargetType = m_cameraList[cameraCount]._TargetType; for (int i = 0; i < m_cameraList[cameraCount]._Params.Length; i++) { camera._Params[i]._EquA = m_cameraList[cameraCount]._Params[i]._EquA; camera._Params[i]._EquB = m_cameraList[cameraCount]._Params[i]._EquB; camera._Params[i]._EquC = m_cameraList[cameraCount]._Params[i]._EquC; camera._Params[i]._EquD = m_cameraList[cameraCount]._Params[i]._EquD; } m_cameraList.RemoveAt(cameraCount); } int actionCount = m_actionList.Count - 2; if (actionCount >= 0) { action._Acceleration = m_actionList[actionCount]._Acceleration; action._ActionName = m_actionList[actionCount]._ActionName; action._ActionType = m_actionList[actionCount]._ActionType; action._Duration = m_actionList[actionCount]._Duration; action._EffectLoopTimes = m_actionList[actionCount]._EffectLoopTimes; action._EffectPosition = m_actionList[actionCount]._EffectPosition; action._EffectStartTime = m_actionList[actionCount]._EffectStartTime; action._SoundName = m_actionList[actionCount]._SoundName; action._SoundTime = m_actionList[actionCount]._SoundTime; action._Speed = m_actionList[actionCount]._Speed; action._StartAngle = m_actionList[actionCount]._StartAngle; action._StartPosition = m_actionList[actionCount]._StartPosition; m_actionList.RemoveAt(actionCount); } }
/// <summary> /// 注册回退操作步骤 /// </summary> /// <param name="camera">要保存的镜头数据</param> /// <param name="action">要保存的动作数据</param> public void RegPreStep(StroyCameraConfigData camera, StroyActionConfigData action) { if (m_cameraList.Count > MAX_RESTORESTEP) { m_cameraList.RemoveAt(0); } if (m_actionList.Count > MAX_RESTORESTEP) { m_actionList.RemoveAt(0); } if (camera != null) { m_cameraList.Add(camera.Clone()); } if (action != null) { m_actionList.Add(action.Clone()); } }
void WindowContain(int windowID) { int width = 140; GUI.DragWindow(new Rect(0, 0, width, 30)); switch (m_winType) { case WinType.Animation: if (tooltip.Length > 0) { GUILayout.Label(tooltip, m_guiStyle); m_windowRect.height = (m_curAnimList.Count + 2) * 45; } else { m_windowRect.height = (m_curAnimList.Count + 1) * 45; } for (int i = 0; i < m_curAnimList.Count; i++) { if (GUILayout.Button(m_curAnimList[i].ToString(), GUILayout.Width(width), GUILayout.Height(35))) { if (StroyLineConfigManager.Instance.GetStroyActionConfig.ContainsKey(m_curAnimList[i])) { m_winType = WinType.ActionParams; var curSelectAction = StroyLineConfigManager.Instance.GetStroyActionConfig[m_curAnimList[i]]; EditorDataManager.Instance.CurSelectActionData = curSelectAction; m_curTitleName = m_curAnimList[i].ToString() + "动画参数"; m_actionData = EditorDataManager.Instance.CurSelectActionData; tooltip = ""; } else { tooltip = "配置表中无" + m_curAnimList[i] + "相关数据!"; } } } if (GUILayout.Button("关闭", GUILayout.Width(width), GUILayout.Height(35))) { m_isShowWindow = false; } m_windowRect.height = (m_curAnimList.Count + 4) * 25; break; case WinType.CameraClip: int icRow = 0; if (tooltip.Length > 0) { if (!m_isNewCreate) { if (GUI.Button(new Rect(10, 23 + 2 * 24, width, 25), "关闭")) { m_isShowWindow = false; } GUILayout.Label(tooltip, m_guiStyle); m_windowRect.height = 5 * 25; return; } icRow++; GUILayout.Label(tooltip, m_guiStyle); } GUI.Label(new Rect(10, 23 + icRow * 24, 52, 25), "目标类型"); StroyEditorCommand.ReadData(new Rect(65, 23 + icRow * 24, 88, 22), ref m_cameraData._TargetType); GUI.Label(new Rect(10, 23 + ++icRow * 24, 60.5f, 25), "目标位置X"); StroyEditorCommand.ReadData(new Rect(74, 23 + icRow * 24, 78, 22), ref m_cameraData._TargetPos.x); GUI.Label(new Rect(10, 23 + ++icRow * 24, 60.5f, 25), "目标位置Y"); StroyEditorCommand.ReadData(new Rect(74, 23 + icRow * 24, 78, 22), ref m_cameraData._TargetPos.y); GUI.Label(new Rect(10, 23 + ++icRow * 24, 52, 25), "目标ID"); StroyEditorCommand.ReadData(new Rect(65, 23 + icRow * 24, 88, 22), ref m_cameraData._TargetID); GUI.Label(new Rect(10, 23 + ++icRow * 24, 52, 25), "偏移X"); StroyEditorCommand.ReadData(new Rect(65, 23 + icRow * 24, 88, 22), ref m_cameraData._TargetOffset.x); GUI.Label(new Rect(10, 23 + ++icRow * 24, 52, 25), "偏移Y"); StroyEditorCommand.ReadData(new Rect(65, 23 + icRow * 24, 88, 22), ref m_cameraData._TargetOffset.y); GUI.Label(new Rect(10, 23 + ++icRow * 24, 52, 25), "偏移Z"); StroyEditorCommand.ReadData(new Rect(65, 23 + icRow * 24, 88, 22), ref m_cameraData._TargetOffset.z); GUI.Label(new Rect(10, 23 + ++icRow * 24, 52, 25), "运动时间"); StroyEditorCommand.ReadData(new Rect(65, 23 + icRow * 24, 88, 22), ref m_cameraData._ActionTime); for (int i = 0; i < m_cameraData._Params.Length; i++) { int r = 0; GUI.Label(new Rect(10, 23 + ++icRow * 24, 100, 25), "相机运动参数" + i); StroyEditorCommand.ReadData(new Rect(10, 23 + ++icRow * 24, 35, 22), ref m_cameraData._Params[i]._EquA); StroyEditorCommand.ReadData(new Rect(10 + ++r * 36, 23 + icRow * 24, 35, 22), ref m_cameraData._Params[i]._EquB); StroyEditorCommand.ReadData(new Rect(10 + ++r * 36, 23 + icRow * 24, 35, 22), ref m_cameraData._Params[i]._EquC); StroyEditorCommand.ReadData(new Rect(10 + ++r * 36, 23 + icRow * 24, 35, 22), ref m_cameraData._Params[i]._EquD); } ++icRow; if (m_isNewCreate) { if (GUI.Button(new Rect(10, 23 + ++icRow * 24, 65, 25), "取消")) { m_isShowWindow = false; m_isNewCreate = false; } if (GUI.Button(new Rect(85, 23 + icRow * 24, 65, 25), "保存")) { m_isShowWindow = false; m_isNewCreate = false; AddSaveCamera(m_cameraData); EditorDataManager.Instance.CurSelectCameraGroup._CameraID.Add(m_cameraData._CameraID); StroyLineConfigManager.Instance.GetCameraConfig.Add(m_cameraData._CameraID, m_cameraData); EditorDataManager.Instance.IsUpdateStroyUI = true; } } else { if (GUI.Button(new Rect(10, 23 + ++icRow * 24, width, 25), "关闭")) { m_isShowWindow = false; } } m_windowRect.height = (icRow + 2) * 25; break; case WinType.ActionParams: int iRow = 0; if (tooltip.Length > 0) { iRow++; GUILayout.Label(tooltip, m_guiStyle); } GUI.Label(new Rect(10, 23 + iRow * 24, 52, 25), "动画名称"); m_actionData._ActionName = GUI.TextField(new Rect(65, 23 + iRow * 24, 88, 22), m_actionData._ActionName); GUI.Label(new Rect(10, 23 + ++iRow * 24, 60.5f, 25), "起始位置X"); StroyEditorCommand.ReadData(new Rect(74, 23 + iRow * 24, 78, 22), ref m_actionData._StartPosition.x); GUI.Label(new Rect(10, 23 + ++iRow * 24, 60.5f, 25), "起始位置Y"); StroyEditorCommand.ReadData(new Rect(74, 23 + iRow * 24, 78, 22), ref m_actionData._StartPosition.z); GUI.Label(new Rect(10, 23 + ++iRow * 24, 52, 25), "动画类型"); StroyEditorCommand.ReadData(new Rect(65, 23 + iRow * 24, 88, 22), ref m_actionData._ActionType); GUI.Label(new Rect(10, 23 + ++iRow * 24, 52, 25), "起始角度"); StroyEditorCommand.ReadData(new Rect(65, 23 + iRow * 24, 88, 22), ref m_actionData._StartAngle); GUI.Label(new Rect(10, 23 + ++iRow * 24, 52, 25), "移动速度"); StroyEditorCommand.ReadData(new Rect(65, 23 + iRow * 24, 88, 22), ref m_actionData._Speed); GUI.Label(new Rect(10, 23 + ++iRow * 24, 42, 25), "加速度"); StroyEditorCommand.ReadData(new Rect(55, 23 + iRow * 24, 98, 22), ref m_actionData._Acceleration); GUI.Label(new Rect(10, 23 + ++iRow * 24, 52, 25), "持续时间"); StroyEditorCommand.ReadData(new Rect(65, 23 + iRow * 24, 88, 22), ref m_actionData._Duration); GUI.Label(new Rect(10, 23 + ++iRow * 24, 52, 25), "特效名"); GUI.TextField(new Rect(55, 23 + iRow * 24, 98, 22), (m_actionData._EffectGo == null ? "null" : m_actionData._EffectGo.name)); GUI.Label(new Rect(10, 23 + ++iRow * 24, 52, 25), "特效时间"); StroyEditorCommand.ReadData(new Rect(65, 23 + iRow * 24, 88, 22), ref m_actionData._EffectStartTime); GUI.Label(new Rect(10, 23 + ++iRow * 24, 60.5f, 25), "特效位置X"); StroyEditorCommand.ReadData(new Rect(74, 23 + iRow * 24, 78, 22), ref m_actionData._EffectPosition.x); GUI.Label(new Rect(10, 23 + ++iRow * 24, 60.5f, 25), "特效位置Y"); StroyEditorCommand.ReadData(new Rect(74, 23 + iRow * 24, 78, 22), ref m_actionData._EffectPosition.y); GUI.Label(new Rect(10, 23 + ++iRow * 24, 60.5f, 25), "特效位置Z"); StroyEditorCommand.ReadData(new Rect(74, 23 + iRow * 24, 78, 22), ref m_actionData._EffectPosition.z); GUI.Label(new Rect(10, 23 + ++iRow * 24, 80, 25), "特效循环次数"); StroyEditorCommand.ReadData(new Rect(93, 23 + iRow * 24, 60, 22), ref m_actionData._EffectLoopTimes); GUI.Label(new Rect(10, 23 + ++iRow * 24, 52, 25), "声音时间"); StroyEditorCommand.ReadData(new Rect(65, 23 + iRow * 24, 88, 22), ref m_actionData._SoundTime); GUI.Label(new Rect(10, 23 + ++iRow * 24, 42, 25), "声音名"); m_actionData._SoundName = GUI.TextField(new Rect(55, 23 + iRow * 24, 98, 22), m_actionData._SoundName); //GUILayout.Label("动画名称",GUILayout.Width(60),GUILayout.Height(25)); //actionData._ActionName = GUILayout.TextField(actionData._ActionName, GUILayout.Width(50), GUILayout.Height(25)); //actionData._Acceleration = Convert.ToSingle(GUILayout.TextField(actionData._Acceleration.ToString(), GUILayout.Width(100), GUILayout.Height(25))); ++iRow; if (m_isNewCreate) { if (GUI.Button(new Rect(10, 23 + ++iRow * 24, 65, 25), "取消")) { m_isShowWindow = false; m_isNewCreate = false; } if (GUI.Button(new Rect(85, 23 + iRow * 24, 65, 25), "保存")) { m_winType = WinType.Animation; //m_isShowWindow = false; m_isNewCreate = false; AddSaveAction(m_actionData); EditorDataManager.Instance.CurSelectNpcAction.AnimID.Add(m_actionData._ActionID); m_curAnimList = EditorDataManager.Instance.CurSelectNpcAction.AnimID; m_curTitleName = EditorDataManager.Instance.CurSelectNpcAction.NpcID + "动画列表"; StroyLineConfigManager.Instance.GetStroyActionConfig.Add(m_actionData._ActionID, m_actionData); } } else { if (GUI.Button(new Rect(10, 23 + ++iRow * 24, width, 25), "返回")) { m_winType = WinType.Animation; m_curTitleName = EditorDataManager.Instance.CurSelectNpcAction.NpcID + "动画列表"; } } m_windowRect.height = (iRow + 2) * 25; break; case WinType.CameraGroup: int icgRow = 0; if (tooltip.Length > 0) { icgRow++; GUILayout.Label(tooltip, m_guiStyle); } GUI.Label(new Rect(10, 23 + icgRow * 24, 52, 25), "背景音乐"); m_stroyLineData._BgMusic = GUI.TextField(new Rect(65, 23 + icgRow * 24, 88, 22), m_stroyLineData._BgMusic); GUI.Label(new Rect(10, 23 + ++icgRow * 24, 60.5f, 25), "触发副本"); StroyEditorCommand.ReadData(new Rect(74, 23 + icgRow * 24, 78, 22), ref m_stroyLineData._EctypeID); GUI.Label(new Rect(10, 23 + ++icgRow * 24, 60.5f, 25), "加载地图"); StroyEditorCommand.ReadData(new Rect(74, 23 + icgRow * 24, 78, 22), ref m_stroyLineData._SceneMapID); GUI.Label(new Rect(10, 23 + ++icgRow * 24, 60.5f, 25), "触发条件"); StroyEditorCommand.ReadData(new Rect(74, 23 + icgRow * 24, 78, 22), ref m_stroyLineData._TriggerCondition); GUI.Label(new Rect(10, 23 + ++icgRow * 24, 60.5f, 25), "剧情标识"); StroyEditorCommand.ReadData(new Rect(74, 23 + icgRow * 24, 78, 22), ref m_stroyLineData._StroyLineID); if (GUI.Button(new Rect(10, 23 + ++icgRow * 24, width, 25), "增加镜头组")) { m_stroyLineData._CameraGroup.Add(0); } for (int i = 0; i < m_stroyLineData._CameraGroup.Count; i++) { GUI.Label(new Rect(10, 25 + ++icgRow * 24, 60.5f, 25), "镜头组"); var inputStr = GUI.TextField(new Rect(74, 23 + icgRow * 24, 78, 22), m_stroyLineData._CameraGroup[i].ToString()); m_stroyLineData._CameraGroup[i] = Convert.ToInt32((inputStr.Length == 0) ? "0" : inputStr); } ++icgRow; if (m_isNewCreate) { if (GUI.Button(new Rect(10, 23 + ++icgRow * 24, 65, 25), "取消")) { m_isShowWindow = false; m_isNewCreate = false; } if (GUI.Button(new Rect(85, 23 + icgRow * 24, 65, 25), "保存")) { m_isShowWindow = false; m_isNewCreate = false; int vocation = PlayerManager.Instance.FindHeroDataModel().PlayerValues.PlayerCommonValue.PLAYER_FIELD_VISIBLE_VOCATION; StroyLineConfigManager.Instance.GetStroyLineConfig.Add(new StroyLineKey { VocationID = vocation, ConditionID = m_stroyLineData._TriggerCondition, EctypeID = m_stroyLineData._EctypeID }, m_stroyLineData); EditorDataManager.Instance.SetCurSelectEctypeID(m_stroyLineData._EctypeID, m_stroyLineData._TriggerCondition, m_stroyLineData._TriggerVocation); InitEditorUI(m_stroyLineData); EditorDataManager.Instance.StroyLineTempData.Add(m_stroyLineData); } } m_windowRect.height = (icgRow + 2) * 25; break; default: break; } }
private static void StroyActionConfigPostprocess() { string path = System.IO.Path.Combine(RESOURCE_STROY_CONFIG_FOLDER, "ActionConfig.xml"); TextReader tr = new StreamReader(path); string text = tr.ReadToEnd(); if (text == null) { Debug.LogError("stroyAction config file not exist"); return; } else { XmlSpreadSheetReader.ReadSheet(text); XmlSpreadSheet sheet = XmlSpreadSheetReader.Output; string[] keys = XmlSpreadSheetReader.Keys; object[] levelIds = sheet[keys[0]]; List <StroyActionConfigData> tempList = new List <StroyActionConfigData>(); for (int i = 0; i < levelIds.Length; i++) { if (0 == i || 1 == i) { continue; } StroyActionConfigData data = new StroyActionConfigData(); data._ActionID = Convert.ToInt32(sheet["ActionID"][i]); data._ActionName = Convert.ToString(sheet["Name"][i]); var startPosString = Convert.ToString(sheet["StartPosition"][i]); string[] splitposString = startPosString.Split("+".ToCharArray()); float posX = Convert.ToSingle(splitposString[0]); float posY = Convert.ToSingle(splitposString[1]); float posZ = Convert.ToSingle(splitposString[2]); data._StartPosition = new Vector3(posX, posY, posZ); data._ActionType = Convert.ToInt32(sheet["Type"][i]); data._StartAngle = Convert.ToSingle(sheet["StartAngle"][i]); data._ModelAngle = Convert.ToSingle(sheet["ModelAngle"][i]); data._Speed = Convert.ToSingle(sheet["Speed"][i]); data._Acceleration = Convert.ToSingle(sheet["Acceleration"][i]); data._Duration = Convert.ToSingle(sheet["Duration"][i]); string effectPath = Convert.ToString(sheet["EffectName"][i]); string pathEffect = System.IO.Path.Combine(ASSET_EFFECT_RES_FOLDER, effectPath + ".prefab"); data._EffectGo = (GameObject)AssetDatabase.LoadAssetAtPath(pathEffect, typeof(GameObject)); data._EffectStartTime = Convert.ToSingle(sheet["EffectTime"][i]); var effectPosString = Convert.ToString(sheet["EffectPosition"][i]); string[] effectposList = effectPosString.Split("+".ToCharArray()); float effectposX = Convert.ToSingle(effectposList[1]); float effectposY = Convert.ToSingle(effectposList[2]); float effectposZ = Convert.ToSingle(effectposList[3]); data._EffectPosition = new Vector3(effectposX, effectposY, effectposZ); data._EffectStartAngle = Convert.ToSingle(sheet["EffectAngle"][i]); data._EffectLoopTimes = Convert.ToInt32(sheet["EffectLoopTime"][i]); data._SoundTime = Convert.ToSingle(sheet["SoundTime"][i]); data._SoundName = Convert.ToString(sheet["SoundName"][i]); tempList.Add(data); } CreateActionConfigDataBase(tempList); } }
/// <summary> /// 创建玩家对象 /// </summary> /// <param name="npcAction"></param> /// <param name="AnimID"></param> public void CreateRoleData(StroyAction npcAction, int AnimID) { StroyActionConfigData actionData = StroyLineConfigManager.Instance.GetStroyActionConfig[AnimID]; Vector3 pos = Vector3.zero; pos = StroyLineConfigManager.Instance.GetStroyActionConfig[AnimID]._StartPosition; //pos.z = StroyLineConfigManager.Instance.GetStroyActionConfig[AnimID]._StartPosition.z; GameObject npcGo = null; Quaternion roleInitDirection = Quaternion.Euler(0, (float)actionData._StartAngle, 0); if (StroyLineDataManager.Instance.GetNpcList.ContainsKey(npcAction.NpcID)) { Transform npcTrans = StroyLineDataManager.Instance.GetNpcList[npcAction.NpcID].transform; npcTrans.position = pos; npcTrans.forward = roleInitDirection * Vector3.forward; return; } switch (npcAction.RoleType) { case 1: ///生成玩家 var playerData = PlayerDataManager.Instance.GetBattleItemData((byte)npcAction.RoleResID); npcGo = AssemblyPlayer(playerData, pos); npcGo.transform.forward = roleInitDirection * Vector3.forward; break; case 2: ///生成怪物 var monsterData = MapResManager.Instance.GetMapMonsterPrefab(npcAction.RoleResID); //BattleConfigManager.Instance.GetMonsterData(npcAction.RoleResID); //npcGo = (GameObject)GameObject.Instantiate(monsterData.MonsterPrefab, pos, roleInitDirection); //npcGo.RemoveComponent<MonsterBehaviour>("MonsterBehaviour"); //npcGo.RemoveComponent<MonsterBehaviour>("HurtFlash"); break; case 3: ///生成NPC var npcPrefab = MapResManager.Instance.GetMapMonsterPrefab(npcAction.RoleResID); //NPCConfigManager.Instance.NPCConfigList[npcAction.RoleResID].NPCPrefab; if (npcPrefab != null) { npcGo = (GameObject)GameObject.Instantiate(npcPrefab, pos, roleInitDirection); } else { Debug.LogWarning("剧情系统:发现将要生成的NpcPrefab为空。"); } break; case 4: ///生成当前英雄 var curHeroVocation = PlayerManager.Instance.FindHeroDataModel().PlayerValues.PlayerCommonValue.PLAYER_FIELD_VISIBLE_VOCATION; if (curHeroVocation == 0) ///当在剧情编辑器状态下,无法获得用户职业 { curHeroVocation = (byte)npcAction.RoleResID; } var heroData = PlayerDataManager.Instance.GetBattleItemData((byte)curHeroVocation); if (heroData != null) { npcGo = AssemblyPlayer(heroData, pos); npcGo.transform.forward = roleInitDirection * Vector3.forward; } else { TraceUtil.Log(SystemModel.Common, TraceLevel.Error, "没有获得当前英雄配置数据"); } break; default: break; } if (npcGo != null) { StroyNpcBehaviour npcBehaviour; int size; var childs = npcGo.GetChildTransforms(); childs.ApplyAllItem(P => P.gameObject.layer = 30); // Transform skinObj = npcGo.transform.Find("SkinnedMesh");// SkinnedMeshRenderer[] skinRend = npcGo.GetComponentsInChildren <SkinnedMeshRenderer>(); if (skinRend != null && skinRend.Length != 0) { foreach (SkinnedMeshRenderer skin in skinRend) { skin.updateWhenOffscreen = true; } } if (npcAction.RoleType == 2) { var child = npcGo.transform.GetChild(0); npcGo.SetActive(true); npcBehaviour = child.gameObject.AddComponent <StroyNpcBehaviour>(); size = child.animation.GetClipCount(); if (size > 0) { m_AnimationList.Add(npcAction.NpcID, new List <AnimationClip>()); foreach (AnimationState states in child.animation) { m_AnimationList[npcAction.NpcID].Add(child.animation.GetClip(states.name)); } } } else { npcBehaviour = npcGo.AddComponent <StroyNpcBehaviour>(); size = npcGo.animation.GetClipCount(); if (size > 0) { m_AnimationList.Add(npcAction.NpcID, new List <AnimationClip>()); foreach (AnimationState states in npcGo.animation) { m_AnimationList[npcAction.NpcID].Add(npcGo.animation.GetClip(states.name)); } } } StroyLineDataManager.Instance.GetNpcList.Add(npcAction.NpcID, npcBehaviour); } else { Debug.LogWarning("剧情系统:没有创建ID为" + npcAction.NpcID + "NPC"); } }