簡體   English   中英

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

[英]GameObject' does not contain a definition for '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));
  }
}

我想在與其他對象發生碰撞時更改當前 object 的坐標。

根據您的嘗試,我假設您正在嘗試向與它相撞的 object 施加力。

首先,你做了:

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

盡量避免使用GameObject.Find(string)方法,因為它是一個昂貴的調用。
事實上,您甚至不需要這樣做,因為您實際上已經擁有正在碰撞的游戲 object,這就是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));
  }

回到問題,你試圖做的是向剛體添加力,但是varGameObject類型,而不是RigidBody

您需要做的是從GameObject中獲取RigidBody的組件,如下所示:

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

請注意,如果游戲對象沒有附加剛體組件,則會發生 null 引用異常。
確保你正在碰撞的立方體在 Unity 的 Inspector 中有一個 RigidBody 組件。

此外,您可能需要注意重復GetComponent()調用可能會很昂貴。 如果可能,您可以考慮緩存它。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM