[英]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));
}
回到問題,你試圖做的是向剛體添加力,但是var
是GameObject
類型,而不是RigidBody
。
您需要做的是從GameObject
中獲取RigidBody
的組件,如下所示:
var.GetComponent<Rigidbody>().AddForce(...
請注意,如果游戲對象沒有附加剛體組件,則會發生 null 引用異常。
確保你正在碰撞的立方體在 Unity 的 Inspector 中有一個 RigidBody 組件。
此外,您可能需要注意重復GetComponent()
調用可能會很昂貴。 如果可能,您可以考慮緩存它。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.