首页 > 解决方案 > Unity2D:缩放游戏对象而不缩放其子对象

问题描述

我有一个有孩子的敌人;敌人也有死亡动画。在死亡动画中(使用动画师),我将敌人缩放到合适的大小。然而,敌人中的孩子们也被缩小了,即使我在孩子身上有一个动画,我也在这个孩子身上添加了锚点位置。有没有办法可以缩小敌人但也保持孩子的大小,ps孩子是一个UI文本对象。谢谢!

标签: c#unity3danimator

解决方案


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

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

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


推荐阅读