- LocalizationManager: 新增翻译表(SetFormatted/SetDuration/LocalizeOperateMsg) - LoginPanel: InputField placeholder本地化、字体颜色保持 - HistoryPanel: 用时数据本地化、placeholder本地化 - RecordDetailPanel: 操作详情消息本地化(LanguageChanged重建) - AppraiseWindowBase: 评价等级本地化、操作消息重建 - EditorAppraiser: 所有评估消息改用InjectOperateMsgLocalized - StudentOperateRecorder: 新增InjectOperateMsgLocalized方法 - LocalizationLanguageTestBar: 单例模式、ScreenSpaceOverlay筛选 - 字体切换时保留颜色和verticalOverflow
98 lines
2.5 KiB
C#
98 lines
2.5 KiB
C#
using System.Collections;
|
|
using System.Collections.Generic;
|
|
using UnityEngine;
|
|
using XFramework;
|
|
using System;
|
|
using UnityEngine.Events;
|
|
|
|
//VR人物同步数据发送类
|
|
public class VRPersonSyncSender : MonoBehaviour,IStateSyncSend
|
|
{
|
|
Transform headTrans;
|
|
Transform leftHandTrans;
|
|
Transform rightHandTrans;
|
|
[SerializeField]
|
|
string soleName;
|
|
|
|
public event UnityAction<NetActionType> SyncActionEvent;
|
|
|
|
// Start is called before the first frame update
|
|
void Awake()
|
|
{
|
|
headTrans = this.transform.FindChildTrans("Camera (eye)");
|
|
leftHandTrans = this.transform.FindChildTrans("Controller (left)");
|
|
rightHandTrans = this.transform.FindChildTrans("Controller (right)");
|
|
soleName = $"VRPerson_{GroupLearnHelper.ThisIP}";
|
|
//JoinSendList();
|
|
}
|
|
|
|
public void JoinSendList()
|
|
{
|
|
SyncGOManager.Instance.AddSender(this);
|
|
}
|
|
|
|
public void ExitSendList()
|
|
{
|
|
SyncGOManager.Instance.RemoveSender(this);
|
|
}
|
|
|
|
//隐藏时 赋值Vector3.zero
|
|
public object GetSyncMsg()
|
|
{
|
|
PersonSyncData syncData = new PersonSyncData();
|
|
syncData.personName =GetSoleName();//名称使用类型+IP组合
|
|
if (headTrans != null && headTrans.gameObject.activeSelf)
|
|
{
|
|
syncData.head = new TransGesture(headTrans.position, headTrans.rotation.eulerAngles);
|
|
}
|
|
else
|
|
{
|
|
syncData.head = new TransGesture(Vector3.zero, Vector3.zero);
|
|
}
|
|
if (leftHandTrans != null && leftHandTrans.gameObject.activeSelf)
|
|
{
|
|
syncData.LH = new TransGesture(leftHandTrans.position, leftHandTrans.rotation.eulerAngles);
|
|
}
|
|
else
|
|
{
|
|
syncData.LH = new TransGesture(Vector3.zero, Vector3.zero);
|
|
}
|
|
if (rightHandTrans != null && rightHandTrans.gameObject.activeSelf)
|
|
{
|
|
syncData.RH = new TransGesture(rightHandTrans.position, rightHandTrans.rotation.eulerAngles);
|
|
}
|
|
else
|
|
{
|
|
syncData.RH = new TransGesture(Vector3.zero, Vector3.zero);
|
|
}
|
|
return syncData;
|
|
}
|
|
|
|
//获取同步数据类型
|
|
public Type GetMsgType()
|
|
{
|
|
return typeof(PersonSyncData);
|
|
}
|
|
|
|
//获取该物体唯一名称
|
|
public string GetSoleName()
|
|
{
|
|
return soleName;
|
|
}
|
|
}
|
|
|
|
[Serializable]
|
|
public class PersonSyncData
|
|
{
|
|
//名称
|
|
public string personName;
|
|
//头
|
|
public TransGesture head;
|
|
//左手
|
|
public TransGesture LH;
|
|
//右手
|
|
public TransGesture RH;
|
|
}
|
|
|
|
|