Unity/C#:如何在动画状态机中禁用组件

Posted

技术标签:

【中文标题】Unity/C#:如何在动画状态机中禁用组件【英文标题】:Unity/C#: How to disable component in animation state machine 【发布时间】:2021-10-12 09:17:06 【问题描述】:

当动画状态机达到某个状态时,我正在尝试禁用 gameObject obj 上的 BoxCollider2D。我已经看遍了,没有运气。有什么帮助!

GameObject obj;
    
    void OnStateEnter()
        obj.GetComponent<BoxCollider2D>().enabled = false;
    

这就是我所拥有的,但我不断收到编译器错误。我对 Unity 和 C# 比较陌生(尽管我在 C 和 C++ 方面有扎实的背景)。

【问题讨论】:

请使用正确的标签!请注意,unityscript 是或更好的是曾经是一种 javascript 风格,类似于早期 Unity 版本中使用的自定义语言,并且现在已经不推荐使用了!如果您不使用该语言,请不要使用该标签。 【参考方案1】:

我对此没有太多经验,但我对此进行了一些研究。我认为问题可能是你的班级不是来自 StateMachineBehaviour。它可能仍然源自 Monobehaviour。看看这个文档。 https://docs.unity3d.com/ScriptReference/StateMachineBehaviour.html

如果不是,可能是因为 OnStateEnter 需要参数才能工作。该文档有一个示例,因此我建议您尝试一下,看看它是如何工作的。

PS:我认为如果您确切地提到您遇到的错误,它可能对社区更有帮助。编译器错误可能是因为其他原因。

【讨论】:

以上是关于Unity/C#:如何在动画状态机中禁用组件的主要内容,如果未能解决你的问题,请参考以下文章

如何在反应中保持 Xstate 状态机中的状态?

运动速度不在状态机中更新

Unity笔记一些动画系统状态机细节

如何让 Angular 组件动画跟随 CSS 类的变化,而不是静态样式?

如何在 SwiftUI 中禁用子视图上的特定状态更改动画

verilog状态机中的一个状态执行时间问题