对象成为游戏对象的子代时会变形

问题描述

我正在尝试制作一款可以控制移动平台并必须抓住掉落物体的游戏。为了使对象随平台一起移动,我将其作为平台的子对象。问题在于,一旦对象旋转成为平台的子对象后,它就会变形。 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 的所有后代。

由于平台没有祖先,因此您可以使用的一种解决方案是将每个对象包装到一个容器中,该容器不执行 platform 创建的缩放比例。

这是您的操作方式:

  1. 当对象与 platform 碰撞时,创建一个新的游戏对象,我们可以将其称为 container
  2. 使容器具有一个localScale,它是平台localScale的逆。
  3. 容器设为平台的子级。
  4. 使对象成为容器的子级。

这是附加在 platform 上的代码中的外观:

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. ...
}

这很简单,但是如果您更改平台的大小,则需要相应地更新每个容器localScale

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...