我正在与Unity合作,我正在制造一个敌人放下他的武器。武器的向量(在局部空间中)是(0,0,1 .71),我使用以下函数:
void SetGunDrop()
{
gun.SetParent (null);
gun.GetComponent<Animator> ().enabled = false;
Rigidbody rb = gun.GetComponent<Rigidbody> ();
rb.isKinematic = false;
}
然而,在从父母分离后,武器会在世界位置中转换为(0,0,1.71),从敌人身体转换到地图的中心。
有没有办法避免这种情况,并使枪从其位置直接落到地上?
答案 0 :(得分:0)
我建议将枪变换的父级设置为null或者设置为世界空间的变换,然后将GameObject的X / Y / Z变换值添加到变换的X / Y / Z.
void SetGunDrop() {
var parentT = gun.parent.transform;
gun.SetParent (null);
gun.position += new Vector(parentT.x, parentT.y, parentT.z);
gun.GetComponent<Animator> ().enabled = false;
Rigidbody rb = gun.GetComponent<Rigidbody> ();
rb.isKinematic = false;
}
如果您想了解有关Transform.SetParent()的更多信息,请查看Unity的文档here。有关移动Unity变换的更多信息,请参阅post。祝你好运!
编辑:更新以反映枪变量是变换游戏对象:)
答案 1 :(得分:0)
解决此问题的一种简单方法是在放下枪之前存储枪的世界位置。
void SetGunDrop()
{
Vector3 tempPosition = gun.position;
gun.SetParent (null);
gun.position = tempPosition;
gun.GetComponent<Animator> ().enabled = false;
Rigidbody rb = gun.GetComponent<Rigidbody> ();
rb.isKinematic = false;
}
这对你有用,祝你好运!