unityzgy/.svn/pristine/48/487e2401be8943633d2a20d46453a72644fc0e0a.svn-base
ayuan9957 bf12e02276 feat: 多语言本地化系统 - 支持中/英/法/俄实时切换
- LocalizationManager: 新增翻译表(SetFormatted/SetDuration/LocalizeOperateMsg)
- LoginPanel: InputField placeholder本地化、字体颜色保持
- HistoryPanel: 用时数据本地化、placeholder本地化
- RecordDetailPanel: 操作详情消息本地化(LanguageChanged重建)
- AppraiseWindowBase: 评价等级本地化、操作消息重建
- EditorAppraiser: 所有评估消息改用InjectOperateMsgLocalized
- StudentOperateRecorder: 新增InjectOperateMsgLocalized方法
- LocalizationLanguageTestBar: 单例模式、ScreenSpaceOverlay筛选
- 字体切换时保留颜色和verticalOverflow
2026-07-16 10:05:59 +08:00

98 lines
3.0 KiB
Plaintext

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.Events;
using XFramework;
/// <summary>
/// 拖拽展示所有的数据框
/// </summary>
public class EditorContentCtrl : MonoBehaviour
{
public GameObject childPrefab;
Dictionary<string, IconBase> iconDic = new Dictionary<string, IconBase>();
[Header("需要更新图标样式时勾选")]
public bool needSprite;
[Header("内部数据时勾选 否则加载外部数据")]
public bool buildInSprite;
public Dictionary<string, IconBase> children { get { return iconDic; } }
/// <summary>
/// 创建一系列子物体
/// </summary>
/// <param name="carsName">子物体名称</param>
public void CreatChildren(string[] carsName,UnityAction CreatOverEvent=null)
{
for (int i = 0; i < carsName.Length; i++)
{
if (CreatOverEvent != null&&i==carsName.Length-1)//最后一个加载完成后 触发加载完成事件
{
AddChild(carsName[i],null,CreatOverEvent);
}
else
AddChild(carsName[i]);
}
}
//名称重复时不生成新的元素 用新元素的数据覆盖原有的数据
public async void AddChild(string childName,object initMsg=null,UnityAction createOver=null)
{
//Debug.Log(childName);
IconBase iconBase;
if (iconDic.ContainsKey(childName))
iconBase = iconDic[childName];
else
iconBase = Instantiate<GameObject>(childPrefab, this.transform).GetComponent<IconBase>();
if (needSprite)
{
Sprite sprite;
if (buildInSprite)
{
sprite = Resources.Load<Sprite>("Sprite/" + childName);
}
else
{
//string path = $"{Application.streamingAssetsPath}/OutAssets/Sprite/{childName}.png";
string path =StreamingAssetsManager.GetPath($"{childName}_Tex");
sprite = await OutSpriteLoader.LoadSprite(path);
}
iconBase.SetSprite(sprite);
}
iconBase.SetName(childName);
if (initMsg != null)
iconBase.SetUpdateIconMsg(initMsg);
iconDic[childName] = iconBase;
createOver?.Invoke();
}
public void RemoveChild(string childName)
{
if (!iconDic.ContainsKey(childName)) return;
GameObject.Destroy(iconDic[childName].gameObject);
iconDic.Remove(childName);
DBManager.Instance.DeleteABMsg(childName);
}
public void RemoveAll()
{
foreach (var item in iconDic)
{
Destroy(item.Value.gameObject);
}
iconDic.Clear();
}
public void SetInitMsg<TKey,TValue>(Dictionary<TKey, TValue> msgDic)
{
foreach (var item in msgDic)
{
if (iconDic.ContainsKey(item.Key.ToString()))
{
iconDic[item.Key.ToString()].SetUpdateIconMsg(item.Value);
}
}
}
}