unityzgy/.svn/pristine/28/2820ab122a66557563c868832dc8f4172aeb253d.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

95 lines
4.1 KiB
Plaintext

using System;
using System.Collections;
using System.Collections.Generic;
using System.Threading.Tasks;
using UnityEngine;
using UnityEngine.Events;
using XFramework;
public static class GameObjectCreater
{
/// <summary>
/// 异步加载AB包创建车队 创建完成后执行完成事件
/// </summary>
public static async void CreateCarFromAB(List<CarData> carDatas, Transform parent, UnityAction createrOverAction)
{
for (int i = 0; i < carDatas.Count; i++)
{
string path = Application.streamingAssetsPath + "/AB/FBX/武器修理工程车.ab";//后续按照车辆名称完善
GameObject prefab = await AssetBundleHelper.LoadABPrefab(path, "武器修理工程车");
GameObject newGO = GameObject.Instantiate<GameObject>(prefab);
newGO.transform.parent = parent;
CarCtrl carCtrl = newGO.AddComponent<CarCtrl>();
carCtrl.SetInitData(carDatas[i]);
if (!string.IsNullOrEmpty(carDatas[i].onboardEquip))//该车辆存在展开时的车载装备 加载车载装备
{
string equipPath = Application.streamingAssetsPath + "/AB/FBX/600平米帐篷.ab";//后续按照车辆名称完善
GameObject equipPrefab = await AssetBundleHelper.LoadABPrefab(equipPath, carDatas[i].onboardEquip);
equipPrefab.GetComponent<OnBoardEquipCtrl>().SetInitName($"{carDatas[i].carName}_{carDatas[i].onboardEquip}");//车名+车载物体名组成唯一标识
carCtrl.SetOnboardEquip(equipPrefab);
}
Crat3DText(carCtrl, new Vector3(0, 6, 0), "MainCamText", Camera.main.transform, LookAtState.LookAt);//创建展示车辆名称的3D文字
GameObjectManager.Instance.SetNewCar(carCtrl);
}
createrOverAction?.Invoke();
}
/// <summary>
/// 创建突发事件触发器
/// </summary>
/// <param name="tuFaDatas"></param>
internal static void CreateTufaTrigger(List<TuFaData> tuFaDatas, Transform parent)
{
for (int i = 0; i < tuFaDatas.Count; i++)
{
GameObject newTufa = new GameObject($"TuFa_{tuFaDatas[i].name.ToString()}");
newTufa.transform.SetParent(parent);
newTufa.transform.position = MapHelper.GetWorldPosFromAnchPos(new Vector2(tuFaDatas[i].posX, tuFaDatas[i].posY));
TuFaTriggerInstanceCtrl tuFaTrigger = newTufa.AddComponent<TuFaTriggerInstanceCtrl>();
tuFaTrigger.InitTrigger(tuFaDatas[i].name, tuFaDatas[i].ID);
GameObjectManager.Instance.InjeectGO(ManagerGOTypes.tufa, tuFaTrigger.gameObject, tuFaDatas[i].ID);
}
}
/// <summary>
/// 创建展示AB包中装备名称的3D文字
/// </summary>
/// <param name="useGO"></param>
public static void Crat3DText(IShowName3DText useGO,Vector3 localPos,string layerName, Transform lookTarget, LookAtState lookAtState)
{
GameObject nameTextPrefab = ResourcesManager.Load<GameObject>("Name3DText");
Text3DCtrl text3DCtrl= GameObject.Instantiate<GameObject>(nameTextPrefab, useGO.GetTrans()).GetComponent<Text3DCtrl>();
if (text3DCtrl)
{
text3DCtrl.transform.localPosition = localPos;
text3DCtrl.SetLookTarget(lookTarget);
text3DCtrl.LookAtState = lookAtState;
text3DCtrl.SetLayer(layerName);
useGO.Bind3DText(text3DCtrl);
}
else
{
Debug.Log("3D文字预制件未挂载Text3DCtrl无法完成初始化");
}
}
/// <summary>
/// 创建VR虚拟同步人物模型 初始化物体名称
/// </summary>
public static void CreatSyncVRPerson(List<SyncUser> allUser)
{
GameObject vrPersonPrafab = ResourcesManager.Load<GameObject>("VR_PersonSyncPrefab");
for (int i = 0; i < allUser.Count; i++)
{
VRPersonSyncHandlerCtrl vRPerson = GameObject.Instantiate<GameObject>(vrPersonPrafab).GetComponent<VRPersonSyncHandlerCtrl>();
vRPerson.SetUser(allUser[i].ip, allUser[i].userName);
}
}
}