C# “游戏对象”不包含“AddForce”| | Unity3D”的定义
我有一个错误:C# “游戏对象”不包含“AddForce”| | Unity3D”的定义,c#,unity3d,C#,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?) 代码: 我希望在与其他对
'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?)
代码:
我希望在与其他对象发生碰撞时更改当前对象的坐标 根据你所尝试的,我假设你正在尝试向与之碰撞的物体添加力 首先,你做到了:
if (myCollision.gameObject.name == "Cube")
{
var = GameObject.Find("Cube");
var.AddForce(new Vector3(0.0f, 0.0f, power));
}
尽量避免GameObject.Findstring方法,因为这是一个昂贵的调用。
事实上,你甚至不需要这样做,因为你实际上已经有了你正在碰撞的游戏对象,这就是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类型,而不是刚体
您需要做的是从GameObject获取刚体的组件,如下所示:
var.GetComponent<Rigidbody>().AddForce(...
请注意,如果游戏对象没有连接刚体组件,则会发生空引用异常。
确保正在碰撞的立方体在Unity的检查器中有刚体组件。
另外,您可能需要注意重复的GetComponent调用可能会很昂贵。如果可能的话,你可以考虑缓存它。谢谢你的回答。我有下一个字符串:Cube.GetComponent.addforcenewvector30.0f,0.0f,power;通过控制台中的冲突,我遇到了下一个错误:NullReferenceException:对象引用未设置为对象的实例。立方体有刚体。所有代码:@bass\u devware注意,您从未分配多维数据集;做一个立方体=myCollision.gameObject;在增加力量之前。或者您可以用myCollision.gameObject替换多维数据集
var.GetComponent<Rigidbody>().AddForce(...