在unity中执行字体大小选择器的最佳方法是什么?



我会尽我所能解释我的情况:

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

据我所知,这个过程的步骤如下:

  1. 用户选择新的字体大小
  2. 事件被抛出
  3. DDOL脚本通过应用新大小处理事件

问题:

1。是否有一种方法可以将字体大小直接应用于所有UI组件,或者我必须访问每个对象来应用它?

2。我如何保存这些更改以保存在游戏中?

我试图通过保存PlayerPref中的新尺寸来处理事件,然后将其应用于每个UI预制组件。在我看来,这是非常低效的。

  1. 您需要创建一个在所有Text对象上设置它们的类。LeanLocalization是一个处理本地化的资产,但它是一个很好的例子1 .你如何实现它。

下面是一个代码示例。您可以在编辑器中设置所需的文本大小。因此,如果你想在构建中这样做,你需要改变那个方法,但我认为这给了你一个想法。

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文件中。

相关内容

最新更新