- LocalizationManager: 新增翻译表(SetFormatted/SetDuration/LocalizeOperateMsg) - LoginPanel: InputField placeholder本地化、字体颜色保持 - HistoryPanel: 用时数据本地化、placeholder本地化 - RecordDetailPanel: 操作详情消息本地化(LanguageChanged重建) - AppraiseWindowBase: 评价等级本地化、操作消息重建 - EditorAppraiser: 所有评估消息改用InjectOperateMsgLocalized - StudentOperateRecorder: 新增InjectOperateMsgLocalized方法 - LocalizationLanguageTestBar: 单例模式、ScreenSpaceOverlay筛选 - 字体切换时保留颜色和verticalOverflow
119 lines
5.9 KiB
C#
119 lines
5.9 KiB
C#
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)
|
|
{
|
|
Dictionary<string, Task<GameObject>> taskDic = new Dictionary<string, Task<GameObject>>();
|
|
Dictionary<string, string> nameToTaskDic = new Dictionary<string, string>();
|
|
for (int i = 0; i < carDatas.Count; i++)
|
|
{
|
|
string prefabName = "武器修理工程车";//后续根据车辆名称完善 现阶段所有车型用同一个模型
|
|
nameToTaskDic.Add(carDatas[i].carName, prefabName);//
|
|
if (!taskDic.ContainsKey(prefabName))//避免加载重复资源
|
|
{
|
|
string path = StreamingAssetsManager.GetPath(prefabName);//根据预制件名称获取资源路径
|
|
taskDic.Add(prefabName, AssetBundleHelper.LoadABPrefab(path, prefabName));
|
|
}
|
|
if (!string.IsNullOrEmpty(carDatas[i].onboardEquip))//该车辆存在展开时的车载装备 加载车载装备
|
|
{
|
|
string childPrefabName = "600平米帐篷";//后续按照车载装备名称完善 现阶段所有只有一个车载模型
|
|
if (!taskDic.ContainsKey(childPrefabName))//避免加载重复资源
|
|
{
|
|
nameToTaskDic.Add(carDatas[i].onboardEquip, childPrefabName);//车载物体没有分配好唯一名称
|
|
string childPrefabPath = StreamingAssetsManager.GetPath(childPrefabName);//根据预制件名称获取资源路径
|
|
taskDic.Add(childPrefabName, AssetBundleHelper.LoadABPrefab(childPrefabPath, childPrefabName));
|
|
}
|
|
}
|
|
}
|
|
await Task.WhenAll(taskDic.Values);//等待所有的车辆和车载物体加载完成
|
|
|
|
for (int i = 0; i < carDatas.Count; i++)
|
|
{
|
|
//string path = StreamingAssetsManager.GetPath("武器修理工程车");//后续按照车辆名称完善
|
|
//GameObject prefab = await AssetBundleHelper.LoadABPrefab(path, "武器修理工程车");
|
|
GameObject prefab = taskDic[nameToTaskDic[carDatas[i].carName]].Result;//获取资源加载线程的资源 可能为空 后续处理为空情况
|
|
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 =StreamingAssetsManager.GetPath("600平米帐篷");//后续按照车载装备名称完善
|
|
//GameObject equipPrefab = await AssetBundleHelper.LoadABPrefab(equipPath, carDatas[i].onboardEquip);
|
|
GameObject equipPrefab = taskDic[nameToTaskDic[carDatas[i].onboardEquip]].Result;//获取资源加载线程的资源 可能为空 后续处理为空情况
|
|
carCtrl.SetOnboardEquip(equipPrefab, $"{carDatas[i].carName}_{carDatas[i].onboardEquip}");
|
|
}
|
|
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,float textSzie=0)
|
|
{
|
|
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);
|
|
text3DCtrl.SetTextSize(textSzie);
|
|
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].userName, allUser[i].ip);
|
|
}
|
|
}
|
|
|
|
}
|