【问题标题】:Object deforms when it becomes a child of a gameobject对象在成为游戏对象的子对象时变形
【发布时间】:2020-08-11 04:22:43
【问题描述】:

我正在尝试制作一款游戏,您可以在其中控制移动平台并且必须接住坠落的物体。为了让物体在你抓住它后随平台移动,我将这些物体设置为平台的子对象。问题是当对象成为平台的子对象后旋转时,它会变形。 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.

【问题讨论】:

    标签: c# unity3d game-physics rigid-bodies


    【解决方案1】:

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

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

    这是你的做法:

    1. 当一个对象与 platform 碰撞时,创建一个我们可以调用 container 的新游戏对象。
    2. 使 container 有一个 localScale,它是 platformlocalScale 的倒数。
    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 的规模,则需要相应地更新每个 containerlocalScale

    【讨论】:

    • 谢谢,我实际上看到了一个类似的问题,但我无法遵循解决方案,因为我对统一很陌生。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-07-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多