首页 > 解决方案 > 对象在成为游戏对象的子对象时变形

问题描述

我正在尝试制作一款游戏,您可以在其中控制移动平台并且必须抓住坠落的物体。为了让物体在你抓住它后随平台移动,我将这些物体设置为平台的子对象。问题是当对象成为平台的子对象后旋转时,它会变形。 在图像中,您可以看到对象已成为平台的子项。并且它在z轴上的旋转导致它变形。

标签: c#unity3dgame-physicsrigid-bodies

解决方案


这是因为 的水平缩放platform也适用于 的所有后代platform

由于平台没有祖先,您可以使用的一种解决方案是将每个对象包装到一个容器中,该容器取消由platform.

这是你如何做到的:

  1. 当一个对象与 碰撞时platform,创建一个我们可以调用的新游戏对象container
  2. 使container有 alocalScale是 of 的localScale倒数platform
  3. container一个孩子platform
  4. 使对象成为 的子对象container

以下是代码中的样子,附加到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. ...
}

这很简单,但是如果您更改了 的比例platform,则需要相应地更新localScaleevery的container


推荐阅读