繁体   English   中英

Unity2D:缩放游戏对象而不缩放其子对象

[英]Unity2D: Scale a GameObject without Scaling its Children

我有一个敌人,里面有孩子; 敌人也有死亡动画。 在死亡动画中(使用动画师),我将敌人缩放到合适的大小。 然而,敌人内部的孩子也被缩小了,即使我在我已经调整大小的孩子上有一个动画,我还在这个孩子上添加了锚点位置。 有没有一种方法可以缩小敌人,同时保持孩子的大小,ps 孩子是一个 UI 文本对象。 谢谢!

也许(希望)有更好的解决方案,但您可以在子对象上使用一个组件,该组件始终保持原始比例反转父比例的相对变化

public class FreezeScale : MonoBehaviour
{
    private Vector3 originalScale;
    private Vector3 parentOriginalScale;

    private void Awake()
    {
        // afaik RectTransform inherits from Transform 
        // so this should also work for UI objects.

        originalScale = transform.localScale;

        parentOriginalScale = transform.parent.localScale;
    }

    private void LateUpdate()
    {
        var currentParentScale = Transform.parent.localScale;

        // Get the relative difference to the original scale
        var diffX = currentParentScale.x / parentOriginalScale.x;
        var diffY = currentParentScale.y / parentOriginalScale.y;
        var diffZ = currentParentScale.z / parentOriginalScale.z;

        // This inverts the scale differences
        var diffVector = new Vector3 (1/diffX, 1/diffY, 1/diffZ);

        // Apply the inverted differences to the original scale
        transform.localScale = originalScale * diffVector;
    }
}

自从在我的手机上被黑后就没有测试过,但我希望你能明白 ;)

我看到的解决您的问题的最简单方法是在层次结构中引入另一个更高的GameObject

这个GameObject将是你的敌人对象的父对象,而你的Text对象目前是敌人的孩子。

这样你就可以独立于Text缩放敌人。

将孩子的比例设置为世界空间而不是局部空间。

局部空间是默认值,但它会超出父级的比例,因此当敌人缩小时,文本也会缩小。

或者,您可以将两个对象都设置为空对象的子对象,然后将敌人缩小,文本应该保持相同的大小,因为它使用了空父对象的比例,这也不会改变大小。

看这里:

 public static Vector3 GetWorldScale(Transform transform)
    {
        Vector3 worldScale = transform.localScale;
        Transform parent = transform.parent;

        while (parent != null)
        {
            worldScale = Vector3.Scale(worldScale,parent.localScale);
            parent = parent.parent;
        }

        return worldScale;
    }

只是一种解决方法,您打算使用它:

yourtransform.LocalScale=Transform.localToWorldMatrix

但它给我带来了问题......虽然上述方法效果很好。

transform.scale=GetWorldScale(transform);

编辑:让我们明确一点,最简单的方法是在缩小父级之前取消 objext 。 这将分开秤。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM