国产精品天干天干,亚洲毛片在线,日韩gay小鲜肉啪啪18禁,女同Gay自慰喷水

歡迎光臨散文網(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ó)家法律
莲花县| 邛崃市| 徐州市| 长汀县| 淳安县| 万源市| 宁蒗| 桃园县| 乌鲁木齐县| 汝州市| 二手房| 井冈山市| 伊通| 永和县| 锦州市| 玉门市| 蒲城县| 阿坝县| 大方县| 凤翔县| 芜湖市| 肥西县| 克什克腾旗| 巴东县| 马尔康县| 彩票| 庄浪县| 沈阳市| 吉水县| 资源县| 江北区| 尚义县| 基隆市| 高雄市| 枞阳县| 石狮市| 宁城县| 长武县| 涿鹿县| 雷州市| 白玉县|