【问题标题】:GameObject' does not contain a definition for 'AddForce' || Unity3DGameObject'不包含'AddForce'的定义|| Unity3D
【发布时间】:2019-09-29 01:01:29
【问题描述】:

我有一个错误:

'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));
  }
}

我想改变当前对象的坐标,与其他对象发生碰撞。

【问题讨论】:

    标签: c# unity3d


    【解决方案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,而不是 RigidBody

    您需要做的是从GameObject 中获取RigidBody 的组件,如下所示:

    var.GetComponent<Rigidbody>().AddForce(...
    

    请注意,如果游戏对象没有附加刚体组件,则会发生空引用异常。
    确保你正在碰撞的立方体在 Unity 的 Inspector 中有一个 RigidBody 组件。

    此外,您可能需要注意重复的GetComponent() 调用可能会很昂贵。如果可能的话,你可以考虑缓存它。

    【讨论】:

    • 感谢您的回答。我有下一个字符串: Cube.GetComponent().AddForce(new Vector3(0.0f, 0.0f, power));通过控制台中的冲突,我有下一个错误:NullReferenceException:对象引用未设置为对象的实例。立方体有刚体。所有代码:pastebin.com/bR9wuu9H
    • @bass_devware 请注意,您从未分配过Cube;在加力之前执行Cube = myCollision.gameObject;。 (或者您可以将Cube 替换为myCollision.gameObject
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-10-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多