为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

PHP
神不在的星期二 2024-01-20 16:05:51
我有一个错误:'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 回答

?
三国纷争

TA贡献1804条经验 获得超7个赞

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


首先,你做了:


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。


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


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

请注意,如果 GameObject 没有附加 Rigidbody 组件,则会发生空引用异常。

确保与您碰撞的立方体在 Unity 的检查器中具有 RigidBody 组件。


另外,您可能需要注意,重复GetComponent()调用的成本可能会很高。如果可能的话,您可以考虑缓存它。


查看完整回答
反对 回复 2024-01-20
  • 1 回答
  • 0 关注
  • 112 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信