我正在使用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()?
答案 0 :(得分:5)
FixedUpdate()方法如何能够直接调用Flip()方法?
因为FixedUpdate
是一个实例方法,仅在创建对象时可用。此时,Flip
也可用,因为它也是一个实例方法。它在一个对象的同一个实例中调用all。当您在实例方法中时 - 您处于实际对象实例的范围内。这意味着您可以调用其他实例方法或访问其他实例变量。
那说......如果FixedUpdate
是static
..那么这不会起作用:
static void FixedUpdate()
{
if (move > 0 && !facingRight)
{
Flip(); // BOOOM! CRASSSHHH!! Won't work
}
}
要实现这一目标,您必须在static
方法中实例化对象的新实例,然后调用Flip
。但是,那么,您将无法在方法之间共享任何共同状态 - 实例方法可以访问static
状态,反之则不然。反之亦然。
究竟是Vector2()正在实例化
它在调用AddForce
之前被实例化并传入。这只是语法糖并且透明地发生。