public void SetChildAction(ActionEditor action) { foreach (var item in _childActor) { ActorEditor actor = item.Value; List <ActionEditor> list = null; if (action.IsSkillAction) { list = actor.SkillActions; } else { list = actor.GeneralActions; } int index = list.FindIndex(s => s.ActionName.Equals(action.ActionName)); if (index == -1) { ActionEditor add = Clipboard.Paste <ActionEditor>(); add.ActState = ActionEditor.ActionState.New; list.Add(add); continue; } if (list[index].ActState == ActionEditor.ActionState.Override) { continue; } Clipboard.Copy(action, CopyModes.DeepCopy); ActionEditor temp = Clipboard.Paste <ActionEditor>(); temp.ResetActorEditor(actor); list[index] = temp; } }
public ActionEditor(ActorEditor actorEditor, GeneralAction modelAction, bool isSkill) { ModelAction = modelAction; IsSkillAction = isSkill; _actorEditor = actorEditor; }
public static void Init(ActorEditor actorEditor, ActionEditor action, bool isAddAction, Action <ActionEditor> result = null) { var window = GetWindow <ActionSettingWindow>(true, "行为配置窗口", true); window.position = GUIHelper.GetEditorWindowRect().AlignCenter(400, 250); window.minSize = new Vector2(400, 250); window.maxSize = new Vector2(400, 250); window._nameStyle = SirenixGUIStyles.BoldTitleCentered; window._nameStyle.fontSize = 30; window._nameStyle.fontStyle = FontStyle.Bold; window._nameStyle.normal.textColor = Color.white; window._isAddAction = isAddAction; window._selfActorEditor = actorEditor; window._action = action; window._actionName = action.ActionName; window._clipName = action.ActionClip; window._otherModelName = action.OtherModelName; window._result = result; if (!action.IsFromOther) { window.LoadSelfAction(); } else { window.LoadOtherAction(action.OtherModelName); } }
public static GameObject Instantiate(ActorEditor actorEditor) { GameObject role = Instantiate(actorEditor.CharacterPath); GameObject avatargo = Instantiate(actorEditor.AvatarPath); Debug.Log("骨骼:" + actorEditor.CharacterPath + "\n蒙皮:" + actorEditor.AvatarPath); if (role != null && avatargo != null) { role.SetActive(false); Transform bip = role.transform.Find(ROOT_BONE); if (bip != null) { UnityEngine.Object.DestroyImmediate(bip.gameObject, true); } while (avatargo.transform.childCount > 0) { Transform trans = avatargo.transform.GetChild(0); trans.parent = role.transform; } UnityEngine.Object.DestroyImmediate(avatargo, true); role.SetActive(true); role.transform.localScale = Vector3.one * actorEditor.ModelScale; role.tag = "Player"; } var mc = role.AddComponent <MecanimControl>(); return(role); }
void RemoveChildActor(ActorEditor childCfg) { childCfg.RemoveAllBaseAction(); if (_childActor.ContainsKey(childCfg.ModelName)) { _childActor.Remove(childCfg.ModelName); } }
protected override void OnDestroy() { _action = null; _selfActorEditor = null; _otherActorEditor = null; _result = null; _actClipList = null; }
public void LoadAll() { ClearAll(); _config = ActorConfig.Instance; CfgManager.ConfigDir = ConfigDir; CfgManager.LoadAll(); //--初始化资源路径 EUtil.GetAssetsInSubFolderRecursively(_config.CharacterRelativeDir, "*.prefab", ref AllCharacters); EUtil.GetAssetsInSubFolderRecursively(_config.AvatarRelativeDir, "*.prefab", ref AllAvatars); EUtil.GetAssetsInSubFolderRecursively(_config.EffectRelativeDir, "*.prefab", ref AllEffects); foreach (var item in AllCharacters) { string searchDir = item.Value.Substring(0, item.Value.LastIndexOf(@"/prefab")) + "/clips"; var selfClips = new Dictionary <string, string>(); EUtil.GetAssetsInSubFolderRecursively(searchDir, "*.anim", ref selfClips); AllCharacterClips[item.Key] = selfClips; } //--加载行为配置 foreach (var model in CfgManager.Model) { var modelName = model.Key; string path = string.Format("{0}/{1}.xml", ActionConfigPath, modelName); if (!File.Exists(path)) { var config = new XmlCfg.Skill.ActorConfig() { ModelName = modelName }; string savePath = string.Format("{0}/{1}.xml", ActorConfig.Instance.ActionConfigPath, modelName); var actor = new ActorEditor(savePath, config); actor.Save(true); Debug.LogFormat("<color=orange>新建Actor - {0}</color>", modelName); } } string[] files = Directory.GetFiles(ActionConfigPath, "*.xml", SearchOption.TopDirectoryOnly); foreach (var path in files) { var actor = new ActorEditor(path); AddActor(actor); } foreach (var item in _modelDict) { item.Value.InitBaseModelAction(); } var window = ActorEditorWindow.GetWindow <ActorEditorWindow>(); window.RefreshTree(); IsInit = true; Debug.Log("加载所有动作 完毕!"); }
public void RemoveActor(ActorEditor model) { if (!ModelGroupDict.ContainsKey(model.GroupType)) { Debug.LogError("未定义组类型 " + model.GroupType); return; } if (!ModelGroupDict[model.GroupType].Remove(model)) { Debug.LogErrorFormat("{0} 无法从分组中移除", model.MenuItemName); } if (_modelDict.ContainsKey(model.ModelName)) { _modelDict.Remove(model.ModelName); } }
public void AddActor(ActorEditor model) { if (ModelGroupDict.ContainsKey(model.GroupType)) { ModelGroupDict[model.GroupType].Add(model); } else { ModelGroupDict.Add(model.GroupType, new List <ActorEditor>()); ModelGroupDict[model.GroupType].Add(model); } if (!_modelDict.ContainsKey(model.ModelName)) { _modelDict.Add(model.ModelName, model); } }
void OnGUI_Func() { EditorGUILayout.BeginHorizontal(); GUIHelper.PushGUIPositionOffset(UnityEngine.Vector2.up * -2); if (GUILayout.Button("设置受击对象", GUILayout.Width(150))) { SimplePopupCreator.ShowDialog(new List <string>(CfgManager.Model.Keys), (name) => { _targetDisplayName = name; ActorEditor actor = GetActorEditor(name); }); } GUIHelper.PopGUIPositionOffset(); EditorGUILayout.LabelField(_targetDisplayName, EditorStyles.textArea); EditorGUILayout.EndHorizontal(); }
void AddChildActor(ActorEditor childCfg) { var modelDict = childCfg.GetGeneralActionDict(); foreach (var item in GeneralActions) { if (modelDict.ContainsKey(item.ActionName)) { modelDict[item.ActionName].ActState = ActionEditor.ActionState.Override; } else { Clipboard.Copy(item, CopyModes.DeepCopy); ActionEditor action = Clipboard.Paste <ActionEditor>(); action.ActState = ActionEditor.ActionState.Inherit; childCfg.GeneralActions.Add(action); action.ResetActorEditor(childCfg); } } var skillDict = childCfg.GetSkillActionDict(); foreach (var item in SkillActions) { if (skillDict.ContainsKey(item.ActionName)) { skillDict[item.ActionName].ActState = ActionEditor.ActionState.Override; } else { Clipboard.Copy(item, CopyModes.DeepCopy); ActionEditor action = Clipboard.Paste <ActionEditor>(); action.ActState = ActionEditor.ActionState.Inherit; childCfg.SkillActions.Add(action); action.ResetActorEditor(childCfg); } } if (!_childActor.ContainsKey(childCfg.ModelName)) { _childActor.Add(childCfg.ModelName, childCfg); } }
public void Delete() { if (EditorUtility.DisplayDialog("删除操作", "确定要删除文件 -> " + ModelName, "确定", "取消")) { if (File.Exists(_path)) { File.Delete(_path); } ActorEditorWindow window = ActorEditorWindow.GetWindow <ActorEditorWindow>(); OdinMenuItem item = window.MenuTree.Selection.FirstOrDefault(); if (item != null && item.Value != null) { ActorEditor model = item.Value as ActorEditor; HomeConfig.Instance.RemoveActor(model); item.Parent.ChildMenuItems.Remove(item); item.MenuTree.Selection.Clear(); item.Parent.Select(); item.MenuTree.UpdateMenuTree(); item.MenuTree.DrawMenuTree(); } } }
public void ResetActorEditor(ActorEditor actorEditor) { _actorEditor = actorEditor; OnCfgChange(); }
private void LoadOtherAction(string name) { _otherModelName = name; _otherActorEditor = HomeConfig.Instance.GetActorEditor(name); _actClipList = _otherActorEditor.GetActionClips(); }
private void LoadSelfAction() { _otherModelName = string.Empty; _otherActorEditor = null; _actClipList = _selfActorEditor.GetActionClips(); }