我有一个错误:
'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));
}
}
我想更改当前对象的坐标,以免与其他对象发生冲突。
答案 0 :(得分:-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
,而不是{{1 }}。
您需要做的是从RigidBody
获取RigidBody
的组件,就像这样:
GameObject
请注意,如果GameObject没有附加刚性刚体组件,则会发生空引用异常。
确保要与之碰撞的多维数据集在Unity的Inspector中具有RigidBody组件。
另外,您可能要注意重复的var.GetComponent<Rigidbody>().AddForce(...
调用可能会很昂贵。您可以考虑将其缓存。