unity3d 使用Unity滑块调整寿命条大小

yx2lnoni  于 2023-04-07  发布在  其他
关注(0)|答案(2)|浏览(148)

我正在尝试使用Slider组件在Unity中设置一个生命条。层次结构如下:

我有两个填充和边框Images,我做了自定义的精灵。填充对象是彩色栏,而边框对象只包含生命栏的边框。
我在精灵编辑器中修复了填充精灵的边框,如下所示:

然后,在健康栏对象中添加了一个Slider组件来管理栏的大小调整。检查器中的Slider组件如下:

没有任何调整大小的生命条的方面如下:

但是,我对lifebar的大小调整有一个问题。当我调整它的大小时,它的行为如下:

如何避免这种行为?我希望酒吧保持在边界内。

kqlmhetl

kqlmhetl1#

在我的项目中,我使用了这样的辅助组件,但我不确定这是解决这个问题的最好方法。

[ExecuteInEditMode]
[RequireComponent(typeof(Image))]
public class ImagePpuScaler : MonoBehaviour
{

    private enum ScaleAxis
    {
        X,
        Y
    }

    [SerializeField] private float _scaleFactor = 1f;

    [SerializeField] private ScaleAxis _scaleAxis = ScaleAxis.Y;

    private Image _image;
    
    private void OnEnable()
    {
        _image = GetComponent<Image>();
        Update();
    }

    private void Awake()
    {
        OnEnable();
    }

    private void Update()
    {
        if (!_image.sprite)
            return;
        var border = _image.sprite.border;
        var maxBorder = Mathf.Max(border.x, border.y, border.z, border.w);
        float imgSize;
        if (_scaleAxis == ScaleAxis.Y)
        {
            imgSize = _image.rectTransform.rect.size.y;
        }
        else
        {
            imgSize = _image.rectTransform.rect.size.x;
        }

        _image.pixelsPerUnitMultiplier = maxBorder / (imgSize / 2f) * _scaleFactor;
    }
}
col17t5w

col17t5w2#

Sliced image type
嗨,检查你的“填充”图像组件是否是切片类型。

相关问题