C# Unity3d-调用公共静态变量性能

C# Unity3d-调用公共静态变量性能,c#,performance,variables,unity3d,static,C#,Performance,Variables,Unity3d,Static,我想知道我是否在Update或FixedUpdate函数中从另一个脚本调用公共静态变量,这会影响性能吗 比如: [RequireComponent(typeof(Rigidbody))] public class CC : MonoBehaviour { //Components public static Rigidbody rigidbodys; void Awake() { rigidbodys = GetComponent<Rig

我想知道我是否在Update或FixedUpdate函数中从另一个脚本调用公共静态变量,这会影响性能吗

比如:

[RequireComponent(typeof(Rigidbody))]

public class CC : MonoBehaviour
{
    //Components
    public static Rigidbody rigidbodys;

    void Awake()
    {
        rigidbodys = GetComponent<Rigidbody>();
        rigidbodys.freezeRotation = true;
        rigidbodys.useGravity = false;
        rigidbodys.isKinematic = true;
    }
}

如果我使用这种方式,是否会降低性能?

只要不使用update(),它将比计算其他脚本中的速度更快

只要不让getComponent()进入update(),它就会比计算其他脚本中的速度更快

那看起来很好。 在您的固定更新中,您只访问rigibody(在唤醒时设置一次),这是便宜的。 您还可以制作一个普通的公共刚体刚体,并在检查器中传递您配置的游戏对象。然后可以将内容传递给静态刚体。所以你要清理你醒着的地方

void Awake()
{
刚体=刚体;
}
看起来很不错。 在您的固定更新中,您只访问rigibody(在唤醒时设置一次),这是便宜的。 您还可以制作一个普通的公共刚体刚体,并在检查器中传递您配置的游戏对象。然后可以将内容传递给静态刚体。所以你要清理你醒着的地方

void Awake()
{
刚体=刚体;

}
它是一个公共静态变量,而不仅仅是一个公共变量!公共静态变量不需要
getcomponent()
。是的,您是对的。但我的意思是刚体。getComponent()是代码中最慢的部分,因此最好将其置于唤醒状态。如果在固定更新期间只需要检查一次,那么提供的代码就可以了;如果一个框架中需要一次以上的条件,您可以考虑将它存储在局部变量中,如iStase= RigiBoDy.Velue> 0.0f。谢谢,但是我的问题是在第二部分。当我在另一个脚本中调用static
刚体时。我想知道这是个好办法吗?还是不@Borisli我想不出任何更好的替代方案来解决您的情况,因此,我认为这是一个好方法。它是一个公共静态,而不仅仅是一个公共变量!公共静态变量不需要
getcomponent()
。是的,您是对的。但我的意思是刚体。getComponent()是代码中最慢的部分,因此最好将其置于唤醒状态。如果在固定更新期间只需要检查一次,那么提供的代码就可以了;如果一个框架中需要一次以上的条件,您可以考虑将它存储在局部变量中,如iStase= RigiBoDy.Velue> 0.0f。谢谢,但是我的问题是在第二部分。当我在另一个脚本中调用static
刚体时。我想知道这是个好办法吗?还是不@鲍里斯:我想不出更好的办法来解决你的处境,因此,我认为这是一个好办法。谢谢,但我的问题在第二部分。当我在另一个脚本中调用static
刚体时。我想知道这是个好办法吗?还是不?我知道,这是个好办法。在性能上优于单音模式,这是从另一个类获取刚体并确保只有一个实例的另一种方法。你有可能在你的游戏中有很多CC元素,并且都写在同一个静态刚体中。谢谢,但我的问题在第二部分。当我在另一个脚本中调用static
刚体时。我想知道这是个好办法吗?还是不?我知道,这是个好办法。在性能上优于单音模式,这是从另一个类获取刚体并确保只有一个实例的另一种方法。你有可能在你的游戏中有很多CC元素,并且都写入同一个静态刚体。这与问题无关,但我认为你不希望刚体的成员是静态的。CC是一种单一行为,可能连接到许多不同的游戏对象,每个对象都有自己的刚体。静态修改器意味着所有CC实例将共享同一个刚体引用。[如果CC是一个单体(意味着只有一个会出现在场景中),这可能没什么关系。]与这个问题无关,但我认为你不希望rigidbodys成员是静态的。CC是一种单一行为,可能连接到许多不同的游戏对象,每个对象都有自己的刚体。静态修改器意味着所有CC实例将共享同一个刚体引用。[如果CC是一个单身汉(意味着只有一个会出现在场景中),这可能并不重要。]
void FixedUpdate()
{
      if(CC.rigidbodys.velocity > 1)
          {
            DoSomething();
          }
}