unity3d 使用Unity中的元件进行短路评估

q3qa4bjr  于 2023-01-13  发布在  其他
关注(0)|答案(2)|浏览(135)

我有一行代码:Rigidbody rigidbody = go.GetComponent<Rigidbody>() ? go.GetComponent<Rigidbody>() : go.AddComponent(typeof(Rigidbody)) as Rigidbody;其中go是一个游戏对象。当我试图简化这个使用短路评估Rigidbody rigidbody = go.GetComponent<Rigidbody>() || go.AddComponent(typeof(Rigidbody)) as Rigidbody;它给出了错误CS0029: Cannot implicitly convert type 'bool' to 'UnityEngine.Rigidbody'
我在这里做的短路评估不正确吗?有没有可能用短路来做这个,或者我必须用我的更长的解决方案。
任何帮助或建议都是感激的。谢谢。

kkih6yb8

kkih6yb81#

您在这里描述的场景是Unity还提供TryGetComponent<T>(out T component)的原因。
您可以像这样使用它:

if ( !go.TryGetComponent<Rigidbody>( out var rigidbody ) )
    rigidbody = go.AddComponent<Rigidbody>() as Rigidbody;
// rigidbody is now set ...

这可以保护您免受Unity对象在某些条件下显示为非空的奇怪情况的影响,并满足Unity工程师要求您不要使用空条件/合并运算符的要求。

amrnrhlw

amrnrhlw2#

好吧,我忘记了null coalescing,这正是我正在寻找的解决方案。我的注意力集中在JavaScript上,在JavaScript中,短路求值的行为类似于空合并,但C#没有这样的概念。
本质上,我的问题是使用||而不是??

相关问题