Unity:如果有动画对其进行了修改,我将无法访问GameObject.SetActive()?

问题描述 投票:0回答:1

我是Unity的新手,我不知道自己是否缺少任何东西。我反复发现此问题。

我有一个通过代码停用/激活的GameObject。

同一个GameObject被动画停用/激活。

嗯,这行不通。

我的代码中的命令将被忽略。即使动画现在不处于活动状态。

很容易看出我何时遇到此问题,因为在游戏进行期间,我无法从检查器修改GameObject的活动状态。仅当我暂停游戏时,我才能在检查器中修改活动状态,但是在取消暂停后,该元素将返回到先前的状态。

我知道动画可以覆盖代码中所说的任何内容。但是我认为只有在动画处于活动状态时才应该发生这种情况。

如何在动画中和代码中同时使用一个GameObject的SetActive()?

unity3d animation
1个回答
2
投票

通常:您不应将通过动画师进行的更改与通过脚本进行的运行时更改混合。

很容易丢失概述,并且您将不再知道由于动画师而发生的更改以及由于脚本而发生的更改。

如果确实有必要,您应该使用育儿方式,例如

SomeParent
|-- SomeChild

[或者通过脚本控制SomeParent,通过Animator控制SomeChild,反之亦然。


[只要有一个动画器,其中任何动画状态仅在某个属性上保留任何关键帧,由于该动画器在一帧内执行almost latest,因此该动画器通过脚本将该属性“锁定”以防止任何更改。


尝试在LateUpdate中进行更改,或通过yield return new WaitForEndOfFrame();通过协程进行更改,这将在Animator之后执行。


或者,如果可能,您可以在想要通过脚本之类的“手动”覆盖属性的时间禁用Animator,>

_animator.enabled = false;
theObject.SetActive(false);
    
© www.soinside.com 2019 - 2024. All rights reserved.