我想在構建中使用編輯器組件。我到處搜索,他們說用這個:
#if UNITY_EDITOR
//code here
#endif
我認為是如何不在運行時使用編輯器。我想要完全相反的。有沒有辦法做到這一點?或者是否可以在運行時使用此代碼的替代方法?
var controller = UnityEditor.Animations.AnimatorController.CreateAnimatorControllerAtPath("Assets/Resources/Animations/AnimationControllers/SAMPLE_CONTROLLER.controller");
controller.AddParameter("OpenCloseValue", AnimatorControllerParameterType.Float);
var rootStateMachine = controller.layers[0].stateMachine;
var myStateMachine = rootStateMachine.AddStateMachine("s_machine");
var myState1 = myStateMachine.AddState("state_1");
controller.SetStateEffectiveMotion(myState1, myAnimationClip);
謝謝。
uj5u.com熱心網友回復:
RuntimeAnimatorController,在 Unity運行時表示影片控制器的類,不允許您更改控制器引數、層或狀態機。
您嘗試在那里使用的類是命名空間AnimatorController的一部分UnityEditor,因此不能在運行時使用,因此其他海報提到您需要使用預處理命令#if UNITY_EDITOR來避免編譯錯誤。
似乎您在這里嘗試執行的操作不受支持。
uj5u.com熱心網友回復:
如前所述,您所要求的根本不可能。
整個UnityEditor命名空間在構建程序中被剝離,因為它包含僅在 Unity 編輯器本身中可用的功能。
在我看來,盡管您試圖實作的是為AnimationClip已知/現有的AnimatorController.
這是由它提供的,AnimatorOverrideController它維護給定的影片師狀態,但允許為AnimationClip它們分配不同的狀態。
API 中的簡化示例
// As usual get the Animator
var animator = GetComponent<Animator>();
// Create an override controller based on the original Animator controller
var animatorOverrideController = new AnimatorOverrideController(animator.runtimeAnimatorController);
// And use this as the new controller
animator.runtimeAnimatorController = animatorOverrideController;
// Assign a new clip to the given state name
// See https://docs.unity3d.com/ScriptReference/AnimatorOverrideController.Index_operator.html
animatorOverrideController[STATE_NAME] = someAnimationClip;
因此,您只需在編輯器中完全預先配置一個AnimatorController,然后在運行時僅覆寫您AnimationClip在其中的一個。
uj5u.com熱心網友回復:
您想在運行時使用哪些編輯器組件?我認為答案是你不能真正在構建中使用編輯器獨有的組件
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/439966.html
上一篇:基于網格的檢測統一2d
