Unity游戏对象未处于正确位置

本文关键字:于正确 位置 游戏 对象 Unity | 更新日期: 2023-09-27 18:19:38

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

在车里,我放了一个"座位"游戏对象,其位置和旋转用于确定玩家将坐在哪里。

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

这是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;

这似乎应该奏效,但最终发生的是,由于某种原因,球员并没有完全坐在座位上,而是离座位有一小段距离,而且球员的旋转与座位不匹配,反而稍微偏离了座位。所以球员看起来并不是真的坐在座位里,而是漂浮在座位附近,然后转向了其他方向。

有人知道我做错了什么吗?

Unity游戏对象未处于正确位置

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

localPosition指定对象相对于其父对象的位置。如果获取两个对象并指定相同的localPosition,结果将取决于每个对象的父对象的位置。如果它们有不同的父母、不同的缩放或不同的旋转,它们可能会出现在不同的地方。

大致相同的思想适用于rotationlocalRotation

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

如果你想把两个对象放在同一个地方,这就足够了:

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

如果你想让物体随车移动,之后,你也可以重新分配它的父对象:

transform.parent = seat.transform.parent;

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