猿问

GameObject' 不包含'AddForce' || 的定义 Unity3D

我有一个错误:


'GameObject' does not contain a definition for 'AddForce' and no accessible extension method

'AddForce' accepting a first argument of type 'GameObject' could be found (are you missing a using directive or an assembly reference?)

代码:


public float power = 500.0f;

GameObject var;


void OnCollisionEnter(Collision myCollision) {

if (myCollision.gameObject.name == "Cube") {

    var = GameObject.Find("Cube");

    var.AddForce(new Vector3(0.0f, 0.0f, power));

  }

}

我想在与其他对象发生碰撞时更改当前对象的坐标。


神不在的星期二
浏览 113回答 1
1回答

三国纷争

根据您的尝试,我假设您正在尝试向与其碰撞的物体添加力。首先,你做了:if (myCollision.gameObject.name == "Cube")&nbsp; {&nbsp; &nbsp; var = GameObject.Find("Cube");&nbsp; &nbsp; var.AddForce(new Vector3(0.0f, 0.0f, power));&nbsp; }尽量避免使用GameObject.Find(string)方法,因为这是一个昂贵的调用。事实上,您甚至不需要这样做,因为您实际上已经拥有了正在碰撞的游戏对象,这就是目的myCollision。你可以这样做:if (myCollision.gameObject.name == "Cube")&nbsp; {&nbsp; &nbsp; var = myCollision.gameObject; // Aka the gameobject you have collided with.&nbsp; &nbsp; var.AddForce(new Vector3(0.0f, 0.0f, power));&nbsp; }回到问题上来,您想要做的是向刚体添加力,但是var类型是GameObject,而不是RigidBody。RigidBody您需要做的是从 获取的组件GameObject,如下所示:var.GetComponent<Rigidbody>().AddForce(...请注意,如果 GameObject 没有附加 Rigidbody 组件,则会发生空引用异常。确保与您碰撞的立方体在 Unity 的检查器中具有 RigidBody 组件。另外,您可能需要注意,重复GetComponent()调用的成本可能会很高。如果可能的话,您可以考虑缓存它。
随时随地看视频慕课网APP
我要回答