public override void OnInspectorGUI() { var typeindex = serializedObject.FindProperty("modelType"); var affectedObject = serializedObject.FindProperty("affectedObject"); var affectedObjectPath = serializedObject.FindProperty("affectedObjectPath"); var index = serializedObject.FindProperty("index"); EditorGUILayout.PropertyField(affectedObject); int newtypeindex = EditorGUILayout.Popup("ModelType:", (int)typeindex.intValue, Enum.GetNames(typeof(ModelTargetType))); if (newtypeindex != (int)typeindex.intValue) { serializedObject.FindProperty("modelType").intValue = newtypeindex; } List <GameObject> allFbx = AssetUtility.GetAllFBXWithType((ModelTargetType)serializedObject.FindProperty("modelType").intValue); List <string> fbxNamelist = new List <string>(); for (int i = 0; i < allFbx.Count; i++) { fbxNamelist.Add(allFbx[i].name); } int fbxselet = -1; if (affectedObject.objectReferenceValue != null) { if (fbxNamelist.Contains(affectedObject.objectReferenceValue.name)) { fbxselet = fbxNamelist.IndexOf(affectedObject.objectReferenceValue.name); } } int newselectfbx = EditorGUILayout.Popup(fbxselet, fbxNamelist.ToArray()); if (newselectfbx != fbxselet) { Transform parent = ((Transform)serializedObject.FindProperty("affectedObject").objectReferenceValue).parent; GameObject.DestroyImmediate(((Transform)serializedObject.FindProperty("affectedObject").objectReferenceValue).gameObject); GameObject newmodel = GameObject.Instantiate <GameObject>(allFbx[newselectfbx]); newmodel.transform.SetParent(parent); newmodel.name = allFbx[newselectfbx].name; serializedObject.FindProperty("affectedObject").objectReferenceValue = newmodel.transform; } EditorGUILayout.PropertyField(affectedObjectPath); EditorGUILayout.PropertyField(index); if (serializedObject.ApplyModifiedProperties()) { JWindow[] windows = Resources.FindObjectsOfTypeAll <JWindow>(); foreach (var window in windows) { window.Repaint(); } } }
//根据模型类型 加载FBX private void LoadFbx() { SkillArt skillart = EditorDataContainer.currentskillAssetData.skillArt; if (allFbx == null) { allFbx = AssetUtility.GetAllFBXWithType(skillart.modelType); fbxNamelist = new List <string>(); for (int i = 0; i < allFbx.Count; i++) { fbxNamelist.Add(allFbx[i].name); } } }
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 SkillAssetData MakeSkillAssetData(JSequencer sequenceer) { SkillAssetData skillart = new SkillAssetData(); Transform AffectedObject = sequenceer.TimelineContainers[0].AffectedObject; string ModelName = AffectedObject.name; List <GameObject> plist = AssetUtility.GetAllFBXWithType(ModelTargetType.Player); List <GameObject> nlist = AssetUtility.GetAllFBXWithType(ModelTargetType.NPC); skillart.skillArt.modelType = ModelTargetType.Player; bool findtype = false; for (int i = 0; i < plist.Count && !findtype; i++) { if (plist[i].name == ModelName) { skillart.skillArt.modelType = ModelTargetType.Player; findtype = true; } } for (int i = 0; i < nlist.Count && !findtype; i++) { if (nlist[i].name == ModelName) { skillart.skillArt.modelType = ModelTargetType.NPC; findtype = true; } } skillart.skillArt.modelName = ModelName; skillart.skillArt.model = AssetUtility.GetFBXWithName(ModelName); Animator Animator = AffectedObject.GetComponent <Animator>(); skillart.skillArt.animationController = Animator.runtimeAnimatorController.name; skillart.skillArt.id = EditorDataContainer.GetSkillIdByString(AffectedObject.parent.name.Split('_')[1]); if (sequenceer.TimelineContainers.Length > 0) { JTimelineBase[] lines = sequenceer.TimelineContainers[0].Timelines; for (int i = 0; i < lines.Length; i++) { JTimelineBase line = lines[i]; //动作时间线 guideaction /* if (line.LineType() == TimeLineType.Animation) * { * JTimelineAnimation aniline = (JTimelineAnimation)line; * foreach (var track in aniline.AnimationTracks) * { * if (track.name == SkillNames.ActionNames[(int)SkillNames.GuideAction.GuideAction]) * { * if (track.TrackClips.Count > 0) * { * skillart.skillArt.guideAction = track.TrackClips[0].StateName; * } * } * else if (track.name == SkillNames.ActionNames[(int)SkillNames.GuideAction.GuidingAction]) * { * if (track.TrackClips.Count > 0) * { * skillart.skillArt.guidingAction = track.TrackClips[0].StateName; * } * } * else if (track.name == SkillNames.ActionNames[(int)SkillNames.GuideAction.EndAction]) * { * if (track.TrackClips.Count > 0) * { * skillart.skillArt.endAction = track.TrackClips[0].StateName; * } * } * } * }*/ //特效时间线 begineffect if (line.LineType() == TimeLineType.Effect) { JTimelineEffect aniline = (JTimelineEffect)line; foreach (var track in aniline.EffectTracks) { if (track.name == SkillNames.EffectNames[(int)SkillNames.Effect.GuideAction]) { if (track.TrackClips.Count > 0) { skillart.skillArt.guideAction = track.TrackClips[0].StateName; } } if (track.name == SkillNames.EffectNames[(int)SkillNames.Effect.GuidingAction]) { if (track.TrackClips.Count > 0) { skillart.skillArt.guidingAction = track.TrackClips[0].StateName; } } if (track.name == SkillNames.EffectNames[(int)SkillNames.Effect.EndAction]) { if (track.TrackClips.Count > 0) { skillart.skillArt.endAction = track.TrackClips[0].StateName; } } if (track.name == SkillNames.EffectNames[(int)SkillNames.Effect.BeginEffect0] || track.name == SkillNames.EffectNames[(int)SkillNames.Effect.BeginEffect1]) { if (skillart.skillArt.beginEffect == null) { skillart.skillArt.beginEffect = new List <SkillEffectUnit>(); } skillart.skillArt.beginEffect.Add(track.TrackClips[0].effectunit.Copy()); } if (track.name == SkillNames.EffectNames[(int)SkillNames.Effect.EndEffect]) { if (skillart.skillArt.endEffect == null) { skillart.skillArt.endEffect = new List <SkillEffectUnit>(); } skillart.skillArt.endEffect.Add(track.TrackClips[0].effectunit.Copy()); } if (track.name == SkillNames.EffectNames[(int)SkillNames.Effect.UnitEffect]) { if (skillart.skillArt.unitEffect == null) { skillart.skillArt.unitEffect = new List <SkillEffectUnit>(); } if (skillart.skillUnit == null) { skillart.skillUnit = new JSkillUnit(); } skillart.skillArt.unitEffect.Add(track.TrackClips[0].effectunit.Copy()); skillart.skillUnit = track.TrackClips[0].skillunit.Copy(); } if (track.name == SkillNames.EffectNames[(int)SkillNames.Effect.HitEffect]) { if (skillart.skillArt.hitEffect == null) { skillart.skillArt.hitEffect = new List <SkillEffectUnit>(); } skillart.skillArt.hitEffect.Add(track.TrackClips[0].effectunit.Copy()); } if (track.name == SkillNames.EffectNames[(int)SkillNames.Effect.TipEffect]) { if (skillart.skillArt.tipEffect == null) { skillart.skillArt.tipEffect = new List <SkillEffectUnit>(); } skillart.skillArt.tipEffect.Add(track.TrackClips[0].effectunit.Copy()); } if (track.name == SkillNames.EffectNames[(int)SkillNames.Effect.BeginCameraAction]) { if (skillart.skillArt.beginCameraAction == null) { skillart.skillArt.beginCameraAction = new List <SkillCameraAction>(); } skillart.skillArt.beginCameraAction.Add(track.TrackClips[0].cameraAction.Copy()); } if (track.name == SkillNames.EffectNames[(int)SkillNames.Effect.MoveCameraAction]) { if (skillart.skillArt.moveCameraAction == null) { skillart.skillArt.moveCameraAction = new List <SkillCameraAction>(); } skillart.skillArt.moveCameraAction.Add(track.TrackClips[0].cameraAction.Copy()); } if (track.name == SkillNames.EffectNames[(int)SkillNames.Effect.HitCameraAction]) { if (skillart.skillArt.hitCameraAction == null) { skillart.skillArt.hitCameraAction = new List <SkillCameraAction>(); } skillart.skillArt.hitCameraAction.Add(track.TrackClips[0].cameraAction.Copy()); } } } if (skillart.skillArt.beginEffect != null) { skillart.skillArt.beginEffect.Sort(delegate(SkillEffectUnit x, SkillEffectUnit y) { return(x.artEffect.beginTime.CompareTo(y.artEffect.beginTime)); }); } /* * if (line.LineType() == TimeLineType.Particle) * { * JTimelineParticle aniline = (JTimelineParticle)line; * foreach (var track in aniline.ParticleTracks) * { * if (track.name == SkillNames.EffectNames[(int)SkillNames.Effect.BeginEffect0]|| track.name == SkillNames.EffectNames[(int)SkillNames.Effect.BeginEffect1]|| track.name == SkillNames.EffectNames[(int)SkillNames.Effect.EndEffect]) * { * if (track.TrackClips.Count > 0) * { * SkillEffectUnit unit = new SkillEffectUnit(); * unit.configure = track.TrackClips[0].EffectConfig.Copy(); * unit.artEffect.beginTime = (int)(track.TrackClips[0].StartTime*1000f); * unit.artEffect.phaseTime = (int)(track.TrackClips[0].PlaybackDuration * 1000f); * unit.artEffect.effectObj = track.TrackClips[0].Effect; * unit.artEffect.effect = EditorDataContainer.GetIdByString(track.TrackClips[0].ParticleName); * begineffect.Insert(0, unit); * } * } * * } * } * //弹道时间线 * if (skillart.skillArt.unitEffect == null) * skillart.skillArt.unitEffect = new List<SkillEffectUnit>(); * List<SkillEffectUnit> unitEffect = skillart.skillArt.unitEffect; * unitEffect.Clear(); * if (line.LineType() == TimeLineType.Trajectory) * { * JTimelineTrajectory aniline = (JTimelineTrajectory)line; * * foreach (var track in aniline.TrajectoryTracks) * { * if (track.name == SkillNames.EffectNames[(int)SkillNames.Effect.UnitEffect]) * { * if (track.TrackClips.Count > 0) * { * skillart.skillUnit = track.TrackClips[0].skillunit.Copy(); * unitEffect.Add(track.TrackClips[0].effectunit.Copy()); * } * } * } * } */ } } Debug.Log(skillart.skillArt.beginEffect.Count); return(skillart); }