public static List <GameObject> GetAllFBXWithType(ModelTargetType mtype) { string Path = "Assets/" + ResPath; if (mtype == ModelTargetType.Player) { Path = "Assets/" + ResPath + PlayerPath; } if (mtype == ModelTargetType.NPC) { Path = "Assets/" + ResPath + NPCPath; } Dictionary <string, int> files = new Dictionary <string, int>(); inputFiles(Path, files, "*.fbx"); List <GameObject> allfbx = new List <GameObject>(); foreach (var p in files.Keys) { GameObject prefab = (GameObject)AssetDatabase.LoadAssetAtPath <GameObject>(p); allfbx.Add(prefab); } return(allfbx); }
public static SkillAssetData GenerateEmptySkillData(GameObject model, ModelTargetType modelType, string animationControl) { SkillAssetData data = new SkillAssetData(); data.skillArt = new SkillArt(); data.skillArt.model = model; data.skillArt.modelName = model.name; data.skillArt.modelType = modelType; data.skillArt.animationController = animationControl; data.skillArt.beginEffect = new List <SkillEffectUnit>(); data.skillArt.beginEffect.Add(new SkillEffectUnit()); data.skillArt.beginEffect.Add(new SkillEffectUnit()); data.skillArt.endEffect = new List <SkillEffectUnit>(); data.skillArt.endEffect.Add(new SkillEffectUnit()); data.skillArt.unitEffect = new List <SkillEffectUnit>(); data.skillArt.unitEffect.Add(new SkillEffectUnit()); data.skillArt.tipEffect = new List <SkillEffectUnit>(); data.skillArt.tipEffect.Add(new SkillEffectUnit()); data.skillArt.hitEffect = new List <SkillEffectUnit>(); data.skillArt.hitEffect.Add(new SkillEffectUnit()); data.skillArt.beginCameraAction = new List <SkillCameraAction>(); data.skillArt.beginCameraAction.Add(new SkillCameraAction()); data.skillArt.moveCameraAction = new List <SkillCameraAction>(); data.skillArt.moveCameraAction.Add(new SkillCameraAction()); data.skillArt.hitCameraAction = new List <SkillCameraAction>(); data.skillArt.hitCameraAction.Add(new SkillCameraAction()); data.skillUnit = new JSkillUnit(); return(data); }
public static void CreateEmptySkill(string SkillId, GameObject PlayerModel, ModelTargetType modelType, RuntimeAnimatorController controll) { string ModelName = PlayerModel.name; GameObject ShowRoot = new GameObject("ShowRoot_" + SkillId); //获取模型 实例化 GameObject Player = null; if (PlayerModel != null) { Player = UnityEngine.Object.Instantiate(PlayerModel) as GameObject; Player.name = ModelName; Player.transform.parent = ShowRoot.transform; } else { Player = new GameObject(ModelName); Player.transform.parent = ShowRoot.transform; } //获取animator 赋值 if (controll != null) { if (Player.GetComponent <Animator>() == null) { Player.AddComponent <Animator>(); } Player.GetComponent <Animator>().runtimeAnimatorController = controll; } GameObject newSequence = new GameObject("Sequence_" + ModelName); JSequencer sequence = newSequence.AddComponent <JSequencer>(); JTimelineContainer ccontainer = sequence.CreateNewTimelineContainer(Player.transform); JTimelineAnimation aniline = (JTimelineAnimation)ccontainer.AddNewTimeline(TimeLineType.Animation); /* foreach (SkillNames.GuideAction gui in Enum.GetValues(typeof(SkillNames.GuideAction))) * { * JAnimationTrack track = aniline.AddNewTrack(); * track.name = SkillNames.ActionNames[(int)gui]; * }*/ JTimelineEffect effectline = (JTimelineEffect)ccontainer.AddNewTimeline(TimeLineType.Effect); foreach (SkillNames.Effect gui in Enum.GetValues(typeof(SkillNames.Effect))) { JEffectTrack track = effectline.AddNewTrack(); track.name = SkillNames.EffectNames[(int)gui]; } /* JTimelineSound soundline = (JTimelineSound)ccontainer.AddNewTimeline(TimeLineType.Sound); * foreach (SkillNames.Sound gui in Enum.GetValues(typeof(SkillNames.Sound))) * { * JSoundTrack track = soundline.AddNewTrack(); * track.name = SkillNames.SoundNames[(int)gui]; * }*/ }
public static GameObject GetFBXAsset(ModelTargetType tartype, string Name) { GameObject fbx = null; if (tartype == ModelTargetType.Player) { fbx = GetPlayerAsset(Name); } if (tartype == ModelTargetType.NPC) { fbx = GetNPCAsset(Name); } return(fbx); }
public static RuntimeAnimatorController GetAnimationCtl(ModelTargetType tartype, string Name, string CtlName) { string path = "Assets/" + ResPath + PlayerPath + Name + "/Animation/" + CtlName + ".controller"; if (tartype == ModelTargetType.Player) { path = "Assets/" + ResPath + PlayerPath + Name + "/Animation/" + CtlName + ".controller"; } if (tartype == ModelTargetType.NPC) { path = "Assets/" + ResPath + NPCPath + Name + "/Animation/" + CtlName + ".controller"; } RuntimeAnimatorController prefab = AssetDatabase.LoadAssetAtPath <RuntimeAnimatorController>(path); return(prefab); }
//获取技能特效 public static GameObject GetSkillEffect(ModelTargetType tartype, string PlayerName, string EffectName) { string path = "Assets/" + ResPath + SkillEffectPath + PlayerName + "/" + EffectName + ".prefab"; if (tartype == ModelTargetType.Player) { path = "Assets/" + ResPath + SkillEffectPath + PlayerName + "/" + EffectName + ".prefab"; } if (tartype == ModelTargetType.NPC) { path = "Assets/" + ResPath + SkillEffectPath + PlayerName + "/" + EffectName + ".prefab"; } GameObject prefab = AssetDatabase.LoadAssetAtPath <GameObject>(path); if (prefab == null) { throw new System.Exception(string.Format(PlayerName + " SkillEffect {0} not found", EffectName)); } return(prefab); }
private void OnGUI() { if (m_Editor == null) { // 第一个参数这里暂时没关系,因为编辑器没有取目标对象 m_Editor = (PreviewExampleInspector)Editor.CreateEditor(this, typeof(PreviewExampleInspector)); } ModelTargetType modelType = EditorDataContainer.currentskillAssetData.skillArt.modelType; GameObject model = EditorDataContainer.currentskillAssetData.skillArt.model; EditorGUILayout.BeginVertical(); int newtypeindex = EditorGUILayout.Popup("ModelType:", (int)modelType, Enum.GetNames(typeof(ModelTargetType))); if (newtypeindex != (int)modelType) { EditorDataContainer.currentskillAssetData.skillArt.modelType = (ModelTargetType)newtypeindex; } List <GameObject> allFbx = AssetUtility.GetAllFBXWithType((ModelTargetType)newtypeindex); List <string> fbxNamelist = new List <string>(); for (int i = 0; i < allFbx.Count; i++) { fbxNamelist.Add(allFbx[i].name); } int fbxselet = -1; if (model != null) { if (fbxNamelist.Contains(model.name)) { fbxselet = fbxNamelist.IndexOf(model.name); } } int newselectfbx = EditorGUILayout.Popup(fbxselet, fbxNamelist.ToArray()); if (newselectfbx != fbxselet) { EditorDataContainer.currentskillAssetData.skillArt.model = allFbx[newselectfbx]; } GameObject NewFbx = (GameObject)EditorGUILayout.ObjectField("Model:", model, typeof(GameObject), true); if (NewFbx != model) { EditorDataContainer.currentskillAssetData.skillArt.model = NewFbx; EditorDataContainer.currentskillAssetData.skillArt.modelName = EditorDataContainer.currentskillAssetData.skillArt.model.name; } if (EditorDataContainer.currentskillAssetData.skillArt.model != null) { EditorDataContainer.currentskillAssetData.skillArt.modelName = EditorDataContainer.currentskillAssetData.skillArt.model.name; EditorDataContainer.currentskillAssetData.skillArt.animationController = EditorDataContainer.currentskillAssetData.skillArt.model.name + "_Anim"; EditorGUILayout.TextField("animationControllerName", EditorDataContainer.currentskillAssetData.skillArt.animationController); RuntimeAnimatorController controller = AssetUtility.GetAnimationCtl(EditorDataContainer.currentskillAssetData.skillArt.modelType, EditorDataContainer.currentskillAssetData.skillArt.modelName, EditorDataContainer.currentskillAssetData.skillArt.animationController); if (EditorDataContainer.currentskillAssetData.skillArt.animationControllerObj == null && controller != null) { EditorDataContainer.currentskillAssetData.skillArt.animationControllerObj = controller; } RuntimeAnimatorController newcontroller = (RuntimeAnimatorController)EditorGUILayout.ObjectField("AnimatorController:", EditorDataContainer.currentskillAssetData.skillArt.animationControllerObj, typeof(RuntimeAnimatorController), true); if (newcontroller != controller) { EditorDataContainer.currentskillAssetData.skillArt.animationController = newcontroller.name; EditorDataContainer.currentskillAssetData.skillArt.animationControllerObj = newcontroller; } } if (GUILayout.Button("Create Empty Skill")) { EditorDataContainer.CreateEmptySkill("NewSkill", EditorDataContainer.currentskillAssetData.skillArt.model, EditorDataContainer.currentskillAssetData.skillArt.modelType, EditorDataContainer.currentskillAssetData.skillArt.animationControllerObj); } if (EditorDataContainer.currentskillAssetData.skillArt.model != null) { //Texture pre = AssetPreview.GetAssetPreview(EditorDataContainer.currentskillAssetData.skillArt.model); GUILayout.Label(""); Rect rect = GUILayoutUtility.GetLastRect(); rect.width = position.width; rect.height = position.height - rect.y; m_Editor.model = EditorDataContainer.currentskillAssetData.skillArt.model; // EditorGUI.DrawPreviewTexture(rect, pre); m_Editor.DrawPreview(rect); } EditorGUILayout.EndVertical(); }
//生成序列 public static JSequencer GenerateSequence(SkillAssetData skillart) { //id 名称 string SkillId = EditorDataContainer.GetSkillStringById(skillart.skillArt.id); //模型名称 string ModelName = skillart.skillArt.modelName; //起始动作 string guideAction = skillart.skillArt.guideAction; //持续动作 string guidingAction = skillart.skillArt.guidingAction; //结束动作 string endAction = skillart.skillArt.endAction; //animator名称 string animatorName = skillart.skillArt.animationController; RuntimeAnimatorController animationControllerObj = skillart.skillArt.animationControllerObj; //模型类型 主角 NPC ModelTargetType modelType = skillart.skillArt.modelType; //技能列表 List <SkillEffectUnit> beginEffect = skillart.skillArt.beginEffect; //技能列表 List <SkillEffectUnit> unitEffect = skillart.skillArt.unitEffect; //技能列表 List <SkillEffectUnit> tipEffect = skillart.skillArt.tipEffect; //技能列表 List <SkillEffectUnit> hitEffect = skillart.skillArt.hitEffect; GameObject ShowRoot = new GameObject("ShowRoot_" + SkillId); //获取模型 实例化 GameObject PlayerModel = AssetUtility.GetFBXAsset(modelType, ModelName); GameObject Player = null; if (PlayerModel != null) { Player = UnityEngine.Object.Instantiate(PlayerModel) as GameObject; Player.name = ModelName; Player.transform.parent = ShowRoot.transform; } else { Player = new GameObject(ModelName); Player.transform.parent = ShowRoot.transform; } //获取animator 赋值 RuntimeAnimatorController controll = animationControllerObj;// AssetUtility.GetAnimationCtl(modelType, ModelName, animatorName); if (controll != null) { if (Player.GetComponent <Animator>() == null) { Player.AddComponent <Animator>(); } Player.GetComponent <Animator>().runtimeAnimatorController = controll; } //新建队列 GameObject newSequence = new GameObject("Sequence_" + ModelName); JSequencer sequence = newSequence.AddComponent <JSequencer>(); JTimelineContainer ccontainer = sequence.CreateNewTimelineContainer(Player.transform); JTimelineEffect effectline = (JTimelineEffect)ccontainer.AddNewTimeline(TimeLineType.Effect); if (guideAction != "-1") { JEffectTrack track = effectline.AddNewTrack(); track.name = SkillNames.EffectNames[(int)SkillNames.Effect.GuideAction]; JEffectClipData clip = ScriptableObject.CreateInstance <JEffectClipData>(); clip.effectType = EffectType.Animation; clip.TargetObject = effectline.AffectedObject.gameObject; clip.animController = controll; clip.StateName = guideAction; clip.PlaybackDuration = MecanimAnimationUtility.GetStateDurationWithAnimatorController(guideAction, controll); clip.StartTime = 0; track.AddClip(clip); } if (guidingAction != "-1") { JEffectTrack track = effectline.AddNewTrack(); track.name = SkillNames.EffectNames[(int)SkillNames.Effect.GuidingAction]; JEffectClipData clip = ScriptableObject.CreateInstance <JEffectClipData>(); clip.effectType = EffectType.Animation; clip.TargetObject = effectline.AffectedObject.gameObject; clip.animController = controll; clip.StateName = guidingAction; clip.PlaybackDuration = MecanimAnimationUtility.GetStateDurationWithAnimatorController(guidingAction, controll); float t = guidingAction == "-1" ? 0 : MecanimAnimationUtility.GetStateDurationWithAnimatorController(guideAction, controll); clip.StartTime = t; track.AddClip(clip); } if (endAction != "-1") { JEffectTrack track = effectline.AddNewTrack(); track.name = SkillNames.EffectNames[(int)SkillNames.Effect.EndAction]; float t1 = guideAction == "-1" ? 0 : MecanimAnimationUtility.GetStateDurationWithAnimatorController(guideAction, controll); float t = guidingAction == "-1" ? 0 : MecanimAnimationUtility.GetStateDurationWithAnimatorController(guidingAction, controll); JEffectClipData clip = ScriptableObject.CreateInstance <JEffectClipData>(); clip.effectType = EffectType.Animation; clip.TargetObject = effectline.AffectedObject.gameObject; clip.animController = controll; clip.StateName = endAction; clip.PlaybackDuration = MecanimAnimationUtility.GetStateDurationWithAnimatorController(endAction, controll); clip.StartTime = t1 + t; track.AddClip(clip); } if (beginEffect != null) { //一个特效 一条轨道 foreach (SkillEffectUnit effect in beginEffect) { //特效名称 JEffectTrack track = effectline.AddNewTrack(); int index = beginEffect.IndexOf(effect); if (index > 2) { index = 2; } track.name = SkillNames.EffectNames[(int)SkillNames.Effect.BeginEffect0 + index]; JEffectClipData clip = ScriptableObject.CreateInstance <JEffectClipData>(); clip.effectType = EffectType.Particle; clip.effectunit = effect.Copy(); clip.TargetObject = effectline.AffectedObject.gameObject; clip.PlaybackDuration = (float)effect.artEffect.phaseTime / 1000.0f; clip.StartTime = (float)effect.artEffect.beginTime / 1000.0f; track.AddClip(clip); } } if (unitEffect != null) { //一个特效 一条轨道 foreach (SkillEffectUnit effect in unitEffect) { //特效名称 JEffectTrack track = effectline.AddNewTrack(); track.name = SkillNames.EffectNames[(int)SkillNames.Effect.UnitEffect]; JEffectClipData clip = ScriptableObject.CreateInstance <JEffectClipData>(); clip.effectType = EffectType.Trajectory; clip.effectunit = effect.Copy(); clip.skillunit = skillart.skillUnit.Copy(); clip.TargetObject = effectline.AffectedObject.gameObject; clip.PlaybackDuration = (float)effect.artEffect.phaseTime / 1000.0f; clip.StartTime = (float)effect.artEffect.beginTime / 1000.0f; track.AddClip(clip); } } if (tipEffect != null) { //一个特效 一条轨道 foreach (SkillEffectUnit effect in tipEffect) { //特效名称 JEffectTrack track = effectline.AddNewTrack(); track.name = SkillNames.EffectNames[(int)SkillNames.Effect.TipEffect]; JEffectClipData clip = ScriptableObject.CreateInstance <JEffectClipData>(); clip.effectType = EffectType.Particle; clip.effectunit = effect.Copy(); clip.TargetObject = effectline.AffectedObject.gameObject; clip.PlaybackDuration = (float)effect.artEffect.phaseTime / 1000.0f; clip.StartTime = (float)effect.artEffect.beginTime / 1000.0f; track.AddClip(clip); } } if (hitEffect != null) { //一个特效 一条轨道 foreach (SkillEffectUnit effect in hitEffect) { //特效名称 JEffectTrack track = effectline.AddNewTrack(); track.name = SkillNames.EffectNames[(int)SkillNames.Effect.HitEffect]; JEffectClipData clip = ScriptableObject.CreateInstance <JEffectClipData>(); clip.effectType = EffectType.Particle; clip.effectunit = effect.Copy(); clip.TargetObject = effectline.AffectedObject.gameObject; clip.PlaybackDuration = (float)effect.artEffect.phaseTime / 1000.0f; clip.StartTime = (float)effect.artEffect.beginTime / 1000.0f; track.AddClip(clip); // track.AddClip(effectName, (float)effect.artEffect.beginTime / 1000.0f, (float)effect.artEffect.phaseTime / 1000.0f, effectPrefab, effect.configure); } } if (skillart.skillArt.beginCameraAction != null) { //一个特效 一条轨道 foreach (SkillCameraAction effect in skillart.skillArt.beginCameraAction) { JEffectTrack track = effectline.AddNewTrack(); track.name = SkillNames.EffectNames[(int)SkillNames.Effect.BeginCameraAction]; JEffectClipData clip = ScriptableObject.CreateInstance <JEffectClipData>(); clip.effectType = EffectType.Camera; clip.cameraAction = effect.Copy(); clip.TargetCamera = Camera.main; clip.TargetObject = effectline.AffectedObject.gameObject; clip.PlaybackDuration = (float)effect.phaseTime; clip.StartTime = (float)effect.delay; track.AddClip(clip); } } if (skillart.skillArt.moveCameraAction != null) { foreach (SkillCameraAction effect in skillart.skillArt.moveCameraAction) { JEffectTrack track = effectline.AddNewTrack(); track.name = SkillNames.EffectNames[(int)SkillNames.Effect.MoveCameraAction]; JEffectClipData clip = ScriptableObject.CreateInstance <JEffectClipData>(); clip.effectType = EffectType.Camera; clip.cameraAction = effect.Copy(); clip.TargetCamera = Camera.main; clip.TargetObject = effectline.AffectedObject.gameObject; clip.PlaybackDuration = (float)effect.phaseTime; clip.StartTime = (float)effect.delay; track.AddClip(clip); } } if (skillart.skillArt.hitCameraAction != null) { foreach (SkillCameraAction effect in skillart.skillArt.hitCameraAction) { JEffectTrack track = effectline.AddNewTrack(); track.name = SkillNames.EffectNames[(int)SkillNames.Effect.HitCameraAction]; JEffectClipData clip = ScriptableObject.CreateInstance <JEffectClipData>(); clip.effectType = EffectType.Camera; clip.cameraAction = effect.Copy(); clip.TargetCamera = Camera.main; clip.TargetObject = effectline.AffectedObject.gameObject; clip.PlaybackDuration = (float)effect.phaseTime; clip.StartTime = (float)effect.delay; track.AddClip(clip); } } return(sequence); }