GameObject”不包含“ AddForce”的定义。 Unity3D

时间:2019-09-28 15:32:59

标签: c# 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));
  }
}

我想更改当前对象的坐标,以免与其他对象发生冲突。

1 个答案:

答案 0 :(得分:-1)

根据您的尝试,我假设您正在尝试向与之碰撞的物体施加力。

首先,您做到了:

if (myCollision.gameObject.name == "Cube")
  {
    var = GameObject.Find("Cube");
    var.AddForce(new Vector3(0.0f, 0.0f, power));
  }

请尽量避免使用GameObject.Find(string)方法,因为这是一个昂贵的调用。
实际上,您甚至不需要这样做,因为您实际上已经拥有要与之碰撞的游戏对象,这就是myCollision的目的。

您可以改为:

if (myCollision.gameObject.name == "Cube")
  {
    var = myCollision.gameObject; // Aka the gameobject you have collided with.
    var.AddForce(new Vector3(0.0f, 0.0f, power));
  }

回到问题,您要尝试的是向刚体添加力,但是var的类型为GameObject,而不是{{1 }}。

您需要做的是从RigidBody获取RigidBody的组件,就像这样:

GameObject

请注意,如果GameObject没有附加刚性刚体组件,则会发生空引用异常。
确保要与之碰撞的多维数据集在Unity的Inspector中具有RigidBody组件。

另外,您可能要注意重复的var.GetComponent<Rigidbody>().AddForce(... 调用可能会很昂贵。您可以考虑将其缓存。