unity3d 在游戏中统一实现字体大小选择器的最佳方法是什么?[已关闭]

szqfcxe2  于 2023-01-13  发布在  其他
关注(0)|答案(1)|浏览(135)
    • 已关闭**。此问题需要超过focused。当前不接受答案。
    • 想要改进此问题吗?**更新此问题,使其仅关注editing this post的一个问题。

12小时前关门了。
Improve this question
我会尽力解释我的情况:

    • 背景:**我正在制作一款智能手机游戏。我想在游戏选项中实现一个文本大小选择器。只是文本,而不是UI,我已经处理了动态大小。由于我是Unity开发的新手,我不知道如何做到这一点的最佳实践。

据我所知,这一进程的步骤如下:
1.用户选择新字体大小
1.引发事件

  1. DDOL脚本通过应用新大小来处理事件
    • 问题:**
    • 1.是否有方法将字体大小直接应用于所有UI组件,还是必须访问每个对象才能应用?**
    • 2.如何保存此更改以在游戏中持续?**

我尝试过在PlayerPref中保存新的大小,然后将其应用到每个UI预置组件中,在我看来,这是非常低效的。

xn1cxnb4

xn1cxnb41#

1.你需要创建一个类来在所有Text对象上设置它们。LeanLocalization是一个处理本地化的资源,但也是一个很好的例子。
这是一个代码示例。你可以在编辑器中设置想要的文本大小。所以如果你想在构建中这样做,你需要改变那个方法,但我认为这给了你一个想法。

using UnityEngine;

/// <summary>
/// This component will manage the text size of all SizeControlledText components
/// </summary>
[ExecuteInEditMode] //if you want to use it in editor
public class SizeControllerText : MonoBehaviour
{
    public static int size = 20;
    public static event System.Action OnSizeChanged;

    [SerializeField]
    private int _targetSize = 10;
    [SerializeField]
    private bool _updateInEditeMode = true;

    private void Update()
    {
        if (!_updateInEditeMode)
            return;
        
        if (_targetSize != size)
        {
            size = _targetSize;
            OnSizeChanged?.Invoke();
        }
    }
}
using UnityEngine;
using UnityEngine.UI;

/// <summary>This component will update text size</summary>
[ExecuteInEditMode]
[DisallowMultipleComponent]
[RequireComponent(typeof(Text))]
public class SizeControlledText : MonoBehaviour
{
    private Text _targetText;
    private int _currentSize;

    private void Awake()
    {
        _targetText = GetComponent<Text>();
        _currentSize = _targetText.fontSize;
    }

    public void UpdateSize()
    {
        var size = SizeControllerText.size;
        if (_currentSize == size || _targetText == null)
            return;

        _currentSize = size;
        _targetText.fontSize = size;
    }

    private void OnEnable()
    {
        SizeControllerText.OnSizeChanged += UpdateSize;

        UpdateSize();
    }

    private void OnDisable()
    {
        SizeControllerText.OnSizeChanged -= UpdateSize;
        UpdateSize();
    }
}

1.保存到PlayerPreferences中,实现起来简单快捷。在Windows中,这会存储在注册表中。如果你知道你需要更多的设置,可以将所有的设置存储在一个像json这样的文件中。

相关问题