100 lines
3.2 KiB
C#
100 lines
3.2 KiB
C#
/*
|
||
* @Author: 白哉
|
||
* @Description:
|
||
* @Date: 2025年05月26日 星期一 14:05:31
|
||
* @Modify:
|
||
*/
|
||
|
||
|
||
using System.Collections.Generic;
|
||
using System.Linq;
|
||
using Logic.CrashSight;
|
||
using TMPro;
|
||
using UnityEngine;
|
||
|
||
|
||
namespace Logic.Multilingual
|
||
{
|
||
public class MultilingualManager
|
||
{
|
||
public static MultilingualManager Instance = new MultilingualManager();
|
||
public MultilingualType CurrentType => _currentType;
|
||
private MultilingualData _multilingualData;
|
||
private MultilingualType _currentType;
|
||
private List<MultilingualTextMono> _textComs;
|
||
|
||
|
||
public void Init()
|
||
{
|
||
RefreshMultilingualData();
|
||
_currentType = (MultilingualType)PlayerPrefs.GetInt("Multilingual", 0);
|
||
ChangedMultilingual(_currentType);
|
||
}
|
||
|
||
public string GetMultilingualText(uint id)
|
||
{
|
||
RefreshMultilingualData();
|
||
return _multilingualData.GetMultilingualStr(id, _currentType);
|
||
}
|
||
|
||
public TMP_FontAsset GetMultilingualFont(uint fontId)
|
||
{
|
||
RefreshMultilingualData();
|
||
return _multilingualData.GetMultilingualFont(fontId, _currentType);
|
||
}
|
||
|
||
public void ChangedMultilingual(MultilingualType type)
|
||
{
|
||
RefreshMultilingualData();
|
||
RefreshTextComs();
|
||
_currentType = type;
|
||
foreach (var textCom in _textComs) textCom.OnMultilingualChanged();
|
||
}
|
||
|
||
public uint GetFontGroupID(TMP_FontAsset font)
|
||
{
|
||
RefreshMultilingualData();
|
||
return _multilingualData.GetFontGroupID(font);
|
||
}
|
||
|
||
// 这里的 ID 是 ID 字符串,paramList 是实际的字符串
|
||
public void SetUIText(TextMeshProUGUI textCom, string id, List<string> paramList=null)
|
||
{
|
||
if (!textCom) return;
|
||
var multilingual = textCom.gameObject.GetComponent<MultilingualTextMono>();
|
||
if (!multilingual) multilingual = textCom.gameObject.AddComponent<MultilingualTextMono>();
|
||
bool isNumeric = uint.TryParse(id, out uint realId); // 仅整数
|
||
if (!isNumeric) return;
|
||
multilingual.ID = realId;
|
||
multilingual.ParamList = paramList;
|
||
multilingual.OnMultilingualChanged();
|
||
}
|
||
|
||
// paramList 是实际的字符串
|
||
public void SetUIText(TextMeshProUGUI textCom, List<string> paramList=null)
|
||
{
|
||
if (!textCom) return;
|
||
var multilingual = textCom.gameObject.GetComponent<MultilingualTextMono>();
|
||
if (!multilingual) return;
|
||
multilingual.ParamList = paramList;
|
||
multilingual.OnMultilingualChanged();
|
||
}
|
||
|
||
private void RefreshMultilingualData()
|
||
{
|
||
if (!_multilingualData) _multilingualData = Resources.Load<MultilingualData>("Export/Multilingual");
|
||
}
|
||
|
||
private void RefreshTextComs()
|
||
{
|
||
var uiObj = GameObject.Find("UICanvas");
|
||
if (!uiObj)
|
||
{
|
||
LogSystem.LogError($"找不到UI根节点 UICanvas");
|
||
return;
|
||
}
|
||
|
||
_textComs = uiObj.GetComponentsInChildren<MultilingualTextMono>(true).ToList();
|
||
}
|
||
}
|
||
} |