对象在成为游戏对象的子对象时变形
Object deforms when it becomes a child of a gameobject
我正在尝试制作一款游戏,您可以在其中控制移动平台并且必须接住掉落的物体。为了让对象在你抓住它后随平台移动,我将对象设为平台的子对象。问题是,当对象旋转成为平台的子对象时,它会变形。
In the image you can see that the objects have become a child of the platform. and its rotatation in the z axis has caused it to deform.
这是因为 platform 的水平缩放也应用于 platform 的所有后代。
因为平台没有祖先,您可以使用的一种解决方案是将每个对象包装到一个容器中,un-does 平台 创建的缩放。
操作方法如下:
- 当一个对象与平台发生碰撞时,创建一个新的游戏对象我们可以调用容器。
- 使容器有一个
localScale
,它是平台的localScale
的倒数。
- 使容器成为平台的子项。
- 使对象成为 container 的子对象。
下面是附加到 平台 的代码:
private void OnCollisionEnter2D(Collision2d collision)
{
// collision verification here...
// 1
GameObject container = new GameObject("container");
// 2
Vector3 myScale = transform.localScale;
container.transform.localScale = new Vector3(1f/myScale.x, 1f/myScale.y,
1f/myScale.z);
// 3
// use worldPositionStays=false to keep container's local position zero
// & no local rotation
container.transform.SetParent(transform, false);
// 4
collision.transform.SetParent(container);
// disable rigidbody on the object, etc. ...
}
这很简单,但是如果您更改 platform 的比例,则需要更新每个 container[=] 的 localScale
42=]相应地。
我正在尝试制作一款游戏,您可以在其中控制移动平台并且必须接住掉落的物体。为了让对象在你抓住它后随平台移动,我将对象设为平台的子对象。问题是,当对象旋转成为平台的子对象时,它会变形。 In the image you can see that the objects have become a child of the platform. and its rotatation in the z axis has caused it to deform.
这是因为 platform 的水平缩放也应用于 platform 的所有后代。
因为平台没有祖先,您可以使用的一种解决方案是将每个对象包装到一个容器中,un-does 平台 创建的缩放。
操作方法如下:
- 当一个对象与平台发生碰撞时,创建一个新的游戏对象我们可以调用容器。
- 使容器有一个
localScale
,它是平台的localScale
的倒数。 - 使容器成为平台的子项。
- 使对象成为 container 的子对象。
下面是附加到 平台 的代码:
private void OnCollisionEnter2D(Collision2d collision)
{
// collision verification here...
// 1
GameObject container = new GameObject("container");
// 2
Vector3 myScale = transform.localScale;
container.transform.localScale = new Vector3(1f/myScale.x, 1f/myScale.y,
1f/myScale.z);
// 3
// use worldPositionStays=false to keep container's local position zero
// & no local rotation
container.transform.SetParent(transform, false);
// 4
collision.transform.SetParent(container);
// disable rigidbody on the object, etc. ...
}
这很简单,但是如果您更改 platform 的比例,则需要更新每个 container[=] 的 localScale
42=]相应地。