亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

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 關注
  • 222 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號