使用c#在Unity中调用不需要实例化的非静态方法



我使用Unity并使用了一个包含c#代码的官方教程,其形式如下所示:

public class P1_ActionController : MonoBehaviour 
{
  void FixedUpdate() 
  { 
   if (move > 0 && !facingRight) 
    {
     Flip();
    }
  }
  void Flip() 
  {
    //blah blah, something unimportant goes here.
  }
}

我的问题是,fixeduupdate()方法如何能够直接调用Flip()方法?我认为只有静态方法可以在没有实例化的情况下使用,但显然Flip()不是静态方法。

同样,在同一代码块中的一个相关难题是:

        rigidbody2D.AddForce(new Vector2(0,jumpForce));

由于'new'关键字是在Vector2()方法上调用的,Vector2()在哪里被实例化?

fixeduupdate()方法如何能够直接调用Flip()方法?

因为FixedUpdate是一个实例方法,只有在创建对象时才可用。此时,Flip也是可用的,因为它也是一个实例方法。它在一个对象的同一个实例中调用。当你在一个实例方法中——你是在一个实际对象实例的作用域中。这意味着你可以调用其他实例方法或访问其他实例变量。

说. .如果FixedUpdate = static。那么这就行不通了:

static void FixedUpdate() 
{ 
   if (move > 0 && !facingRight) 
   {
       Flip(); // BOOOM! CRASSSHHH!! Won't work
   }
}

要做到这一点,您必须在static方法中实例化对象的新实例,然后调用Flip。但是,这样的话,您就不能在两个方法之间共享任何公共状态——实例方法可以访问static状态,反之则不行。

Vector2()在哪里被实例化

在调用AddForce之前被实例化并传入。

最新更新