五月天青色头像情侣网名,国产亚洲av片在线观看18女人,黑人巨茎大战俄罗斯美女,扒下她的小内裤打屁股

歡迎光臨散文網(wǎng) 會(huì)員登陸 & 注冊(cè)

【Unity技巧4】使用代碼給動(dòng)畫(huà)狀態(tài)機(jī)批量連線

2022-08-21 17:40 作者:機(jī)智的小草yns  | 我要投稿

前段時(shí)間寫技能編輯器的時(shí)候, 發(fā)現(xiàn)很多的動(dòng)畫(huà)片段需要連線,手動(dòng)連線肯定是很麻煩。

那么如何優(yōu)雅得連線呢?

那就是使用AnimatorStateMachine的API來(lái)完成這些事件。

核心API

AnimatorStateMachine.AddTransition //連線

AnimatorStateMachine.AddExitTransition? //連線到退出

AnimatorStateMachine.RemoveEntryTransition //移除連線

AnimatorState.AddState //添加動(dòng)畫(huà)片段到狀態(tài)機(jī)

使用示例



編輯器代碼:

??? public static class XiaocaoEditorAnimTool
??? {
??????? //添加一個(gè)Clip到動(dòng)畫(huà)機(jī)
??????? public static bool AddClipToAnimator(AnimatorController ac, AnimationClip item)
??????? {
??????????? if (!ac.animationClips.Contains(item))
??????????? {
??????????????? AnimatorStateMachine sm = ac.layers[0].stateMachine;
??????????????? AnimatorState state = sm.AddState(item.name, sm.exitPosition + Vector3.up * Random.Range(100, 800));
??????????????? state.motion = item;
??????????????? state.AddExitTransition(true);
??????????????? Debug.Log($"anim add {item.name}");
??????????????? EditorUtility.SetDirty(ac);
??????????????? return true;
??????????? }
??????????? else
??????????? {
??????????????? Debug.Log($"yns has {item.name}");
??????????????? return false;
??????????? }
??????? }

??????? [MenuItem("Assets/AnimatorTool/移除所有連線")]
??????? public static void RemoveAllTransmiss()
??????? {
??????????? OnRemoveAllTransmiss(Selection.activeObject as AnimatorController);
??????? }


??????? [MenuItem("Assets/AnimatorTool/自動(dòng)連線")]
??????? public static void SetIdleTransmiss()
??????? {
??????????? RemoveAllTransmiss();
??????????? OnSetIdleTransmiss(Selection.activeObject as AnimatorController);
??????? }

??????? public static void OnSetIdleTransmiss(AnimatorController ac)
??????? {
??????????? foreach (var item in ac.layers[0].stateMachine.states)
??????????? {
??????????????? if (item.state.name.ToLower() != "idle")
??????????????? {
??????????????????? item.state.AddExitTransition(true);
??????????????? }
??????????? }
??????? }

??????? public static void OnRemoveAllTransmiss(AnimatorController ac, List<string> unRemoves = null)
??????? {
??????????? var stateMachine = ac.layers[0].stateMachine;
??????????? foreach (var item in stateMachine.entryTransitions)
??????????? {
??????????????? if (unRemoves != null)
??????????????? {
??????????????????? if (unRemoves.Contains(item.destinationState.name))
??????????????????? {
??????????????????????? continue;
??????????????????? }
??????????????? }
??????????????? Debug.Log("yns? remove " + item.destinationState);
??????????????? stateMachine.RemoveEntryTransition(item);
??????????? }
??????????? foreach (var item in stateMachine.anyStateTransitions)
??????????? {
??????????????? Debug.Log("yns? remove " + item.destinationState);
??????????????? stateMachine.RemoveAnyStateTransition(item);
??????????? }

??????????? //foreach (var item in ac.layers[0].stateMachine.stateMachines)
??????????? //{
??????????? //??? //Debug.Log("yns? stateMachines " + item.stateMachine.ToString());
??????????? //}
??????????? foreach (var item in ac.layers[0].stateMachine.states)
??????????? {
??????????????? if (unRemoves != null)
??????????????? {
??????????????????? if (unRemoves.Contains(item.state.name))
??????????????????? {
??????????????????????? continue;
??????????????????? }
??????????????? }
??????????????? Debug.Log("yns? states " + item.state.ToString());
??????????????? foreach (var tr in item.state.transitions)
??????????????? {
??????????????????? item.state.RemoveTransition(tr);
??????????????? }
??????????? }
??????????? EditorUtility.SetDirty(ac);
??????????? AssetDatabase.SaveAssets();
??????? }
??? }



【Unity技巧4】使用代碼給動(dòng)畫(huà)狀態(tài)機(jī)批量連線的評(píng)論 (共 條)

分享到微博請(qǐng)遵守國(guó)家法律
潮安县| 双牌县| 达日县| 桃源县| 巫山县| 襄樊市| 汶上县| 将乐县| 北安市| 南木林县| 林甸县| 枣强县| 保亭| 大厂| 罗定市| 孟村| 纳雍县| 仙桃市| 南京市| 乾安县| 巴青县| 微山县| 小金县| 明水县| 水富县| 嵊泗县| 左贡县| 大厂| 藁城市| 江永县| 潼关县| 句容市| 马关县| 方正县| 临高县| 汪清县| 商丘市| 沾益县| 宁蒗| 太白县| 大城县|