我正在制作一个统一的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;
这似乎应该可行,但最终发生的事情是,由于某种原因,玩家并没有在座位上完美地结束,但距离它有一些短距离,而且玩家轮换与座位不匹配,而是结束了一点点。因此,玩家看起来并不是真的坐在座位上,而是靠近它,并转向另一个方向。
有人知道我做错了吗?
答案 0 :(得分:0)
position
指定对象在世界中的位置。如果您拍摄两个对象并指定相同的position
,则它们将位于同一位置。
localPosition
指定对象相对于其父对象的位置。如果你取两个对象并分配相同的localPosition
,结果将取决于每个对象的父对象的位置。如果他们有不同的父母,不同的缩放或不同的轮换,他们可能会在不同的地方结束。
大致相同的想法适用于rotation
和localRotation
。
你似乎混淆了世界空间和局部空间坐标之间的关系。了解差异以及它们与场景层次结构的关系非常重要。
如果你想把两个物品都放在同一个地方,那就足够了:
transform.position = seat.transform.position;
transform.rotation = seat.transform.rotation;
如果您希望对象随汽车移动,之后您也可以重新分配其父级:
transform.parent = seat.transform.parent;
答案 1 :(得分:0)
检查你的玩家对象的轴心点。它可能不在您期望的位置。如果不是,请尝试通过拖动模型使其指向您想要的位置。