Unity游戏对象不在正确的位置

时间:2015-10-28 22:06:03

标签: c# unity3d

我正在制作一个统一的3D游戏,游戏的一部分允许玩家进入汽车并驾驶它。

在车内,我放置了一个“座位”GameObject,其位置和旋转用于确定玩家将坐在哪里。

当我希望玩家坐在车里时,我会让玩家成为玩家的父母,然后将玩家变换位置和旋转设置为座位。

这是C#代码

 // make player's parent the same as the seats parent (which is the car)
 transform.parent = seat.transform.parent;

 // put player in the exact position and rotation as the seat
 animator.transform.position = transform.position = seat.transform.position;
 animator.transform.rotation = transform.rotation = seat.transform.rotation;

 animator.transform.localPosition = transform.localPosition = seat.transform.localPosition;
 animator.transform.localRotation = transform.localRotation = seat.transform.localRotation;

这似乎应该可行,但最终发生的事情是,由于某种原因,玩家并没有在座位上完美地结束,但距离它有一些短距离,而且玩家轮换与座位不匹配,而是结束了一点点。因此,玩家看起来并不是真的坐在座位上,而是靠近它,并转向另一个方向。

有人知道我做错了吗?

2 个答案:

答案 0 :(得分:0)

position指定对象在世界中的位置。如果您拍摄两个对象并指定相同的position,则它们将位于同一位置。

localPosition指定对象相对于其父对象的位置。如果你取两个对象并分配相同的localPosition,结果将取决于每个对象的父对象的位置。如果他们有不同的父母,不同的缩放或不同的轮换,他们可能会在不同的地方结束。

大致相同的想法适用于rotationlocalRotation

你似乎混淆了世界空间和局部空间坐标之间的关系。了解差异以及它们与场景层次结构的关系非常重要。

如果你想把两个物品都放在同一个地方,那就足够了:

transform.position = seat.transform.position;
transform.rotation = seat.transform.rotation;

如果您希望对象随汽车移动,之后您也可以重新分配其父级:

transform.parent = seat.transform.parent;

答案 1 :(得分:0)

检查你的玩家对象的轴心点。它可能不在您期望的位置。如果不是,请尝试通过拖动模型使其指向您想要的位置。