最美情侣中文字幕电影,在线麻豆精品传媒,在线网站高清黄,久久黄色视频

歡迎光臨散文網(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ó)家法律
五家渠市| 贵阳市| 定日县| 永丰县| 阳江市| 迁西县| 基隆市| 孟州市| 蓝山县| 浦县| 阿拉尔市| 鹤山市| 鸡西市| 闵行区| 绩溪县| 五寨县| 安乡县| 沙湾县| 黄山市| 饶平县| 闽清县| 太仆寺旗| 芒康县| 辉南县| 莱西市| 房产| 灵台县| 和田县| 河津市| 遂川县| 富宁县| 淅川县| 平昌县| 水城县| 溆浦县| 黄浦区| 偏关县| 沈丘县| 隆德县| 辉南县| 旅游|