使用C#在Unity中调用非实例化的非静态方法

Sni*_*nik 0 c# unity-game-engine

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

public class P1_ActionController : MonoBehaviour 
{

  void FixedUpdate() 
  { 
   if (move > 0 && !facingRight) 
    {
     Flip();
    }
  }

  void Flip() 
  {
    //blah blah, something unimportant goes here.
  }

}
Run Code Online (Sandbox Code Playgroud)

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

此外,在同一代码块中的相关难题是这一行:

        rigidbody2D.AddForce(new Vector2(0,jumpForce));
Run Code Online (Sandbox Code Playgroud)

因为在Vector2()方法上调用'new'关键字,究竟是Vector2()实例化了吗?

Sim*_*ead 5

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

因为FixedUpdate是一个实例方法,仅在创建对象时可用.此时,Flip也可用,因为它也是一种实例方法.它在一个对象的同一个实例中调用all.当您在实例方法中时 - 您在实际对象实例的范围内.这意味着您可以调用其他实例方法或访问其他实例变量.

那说..如果FixedUpdatestatic..然后这不起作用:

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

要实现这一功能,您必须从static方法中实例化对象的新实例,然后再调用Flip.但是,那么,您将无法在方法之间共享任何共同状态 - 实例方法可以访问static状态,但反之亦然.

究竟是哪个Vector2()被实例化

它在调用AddForce和传入之前被实例化.这只是语法糖并且透明地发生.