【问题标题】:Unity 3D - Cannot set the parent of my collided GameObjectUnity 3D - 无法设置我碰撞的游戏对象的父级
【发布时间】:2016-09-10 12:53:12
【问题描述】:

这个错误正在我的脑海中,我无法弄清楚!

我有一把空枪,当我将它移动到弹匣附近时,它有一个碰撞扳机,可以抓住弹匣,按比例缩放并将其插入枪中​​。这一点工作正常。但是在代码中,我还将杂志父级设置为枪,并将重力设置为 false 并将 isKinematic 设置为 true - 这些位不会发生。因此,弹匣缩放到枪,然后漂浮到远处,当我在 Unity 中查看时,它并没有设置为枪的孩子,并且重力和运动学都未检查,即使我在下面明确设置了这些。如何正确缩放和定位杂志,但没有进行父级和刚体编辑?

代码如下:

//THIS CLASS IS A CHILD OF THE GUN
public class GunBody : MonoBehaviour {

void OnTriggerEnter(Collider collider)
{
Debug.LogError("collision with well");

//check if the collision was with the magazine
if (collider.gameObject.name == "Magazine 1")
{
//reload the gun if it was
addClip(collider.gameObject);
}
}

public void addClip(GameObject magazine)
{
magazine.transform.parent = transform.parent; //DOES NOT WORK
magazine.transform.position = transform.parent.position;
magazine.transform.rotation = transform.parent.rotation;
magazine.transform.localRotation = Quaternion.Euler(-89.96101f, 0f, 0f);
magazine.transform.localScale = new Vector3(14f, 20f, 20f);
magazine.transform.localPosition = new Vector3(0f, -0.8215461f, 1.64772f);
magazine.GetComponent<Rigidbody>().useGravity = false; //DOES NOT WORK
magazine.GetComponent<Rigidbody>().isKinematic = true; //DOES NOT WORK
}

希望有人能发现问题所在?

谢谢

【问题讨论】:

    标签: unity3d 3d game-physics


    【解决方案1】:

    当您执行magazine.transform.parent = transform.parent; 时,您将脚本的父级 设置为杂志的父级。我不知道您的代码是如何组织的,但您确定要将杂志设置为 GunBody's object 父级的子级吗?也可以尝试使用magazine.transform.SetParent(this.transform)

    【讨论】:

    • 结构如下:枪包括枪身、弹匣和手柄。当我弹出弹匣时,我将父级设置为空,因此弹匣不再是枪的一部分。当我拿起一个新弹匣并击中对撞机时,我想将弹匣 OBJECT 放回枪中。我猜你的意思是这不是我目前正在做的事情?
    • 身体是 Gun 的孩子。所以 Body 的父母是枪,所以我试图将杂志设置为枪的孩子,但它不起作用。我做的不对吗?为了澄清我不想设置脚本父级,我想设置杂志对象父级,这是我在传递杂志对象 collider.gameobject 时认为我正在做的事情?
    • 在这种情况下,您做对了,因为该脚本位于您的枪口中。不幸的是问题出在其他地方,我不知道在哪里。这段代码对我来说似乎很好。正如我所说,您可以使用SetParent(),但我怀疑这是您问题的原因。位置和旋转有效吗?
    • 是的,这是我没有得到的,夹子缩放、旋转并定位到枪中。然而,重力和运动学都不受检查,杂志仍然完全不在任何父级之下。可能是因为我从对撞机中获取游戏对象?
    • 这也让我想到了,但是不,我不认为从对撞机中获得游戏对象会以任何方式影响它,因为它只是传递了对您真实游戏对象的引用。您可以使用Destroy(collider.gameobject) 轻松测试它。
    【解决方案2】:

    这种比例和定位问题来自于没有 (1,1,1) 比例的枪。试着把枪和弹匣放在另一个空物体上。

    【讨论】:

    • 嘿,它们在不同的对象上。如前所述,缩放和定位工作绝对完美。但是一旦我移动枪,弹匣就会飘走,当我检查物体重力是否未检查时,运动学也是如此,它也不是枪的一部分。我在代码中清楚地设置了所有这 3 件事,所以我不明白为什么缩放和定位工作但其他行没有?
    【解决方案3】:

    你可以 Magazine.transform.SetParent(transform.parent, false);

    所以它会根据Parent的位置和方向来设置。无需编写前 3 行代码即可设置 Parent Position 和 Rotation。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-07-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多