繁体   English   中英

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

[英]Non-static method called without instantiation in Unity using C#

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

public class P1_ActionController : MonoBehaviour 
{

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

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

}

我的问题是,FixedUpdate()方法如何直接调用Flip()方法? 我以为只能使用静态方法而无需实例化,但是显然Flip()不是静态方法。

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

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

是在Vector2()方法上调用了'new'关键字,而Vector2()正是在哪里实例化的呢?

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

因为FixedUpdate是实例方法,所以仅在创建对象时可用。 此时, Flip也可用,因为它也是一个实例方法。 它在对象的同一实例中全部调用。 当您处于实例方法内部时,您将处于实际对象实例的范围之内。 这意味着您可以调用其他实例方法或访问其他实例变量。

就是说..如果FixedUpdatestatic ..那将行不通:

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

为了使该工作有效,您必须从static方法中实例化对象的新实例,然后调用Flip 但是,这样一来,您将无法在方法之间双向共享任何公共状态-实例方法可以访问static状态,反之亦然。

实例化Vector2()的确切位置

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM