unityzgy/.svn/pristine/4d/4d4df217f1c9f7c7abd6c52790ba8012b2bde23d.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

101 lines
2.5 KiB
Plaintext

using XFramework;
using UnityEngine.UI;
using UnityEngine;
using UnityEngine.Events;
//多级杆
public class MultipoleRod : MonoBehaviour
{
Transform trans_rodroot;
Transform trans_first;
Transform trans_second;
[SerializeField]
[Tooltip("连接目标点")]
Transform targetpoint;
[SerializeField]
[Tooltip("完全收缩时二级突出一级部分的长度")]
float compressLength;
[SerializeField]
[Tooltip("完全拉伸时重叠部分长度")]
float stretchLength;
UnityAction<DisLimitType> TriggerLimitAction;
[SerializeField]
float firstRobLength;
[SerializeField]
float secondRobLength;
[SerializeField]
float maxLength;
[SerializeField]
float minLength;
SimpleDoor simpleDoor;
//能够阻止杆件收缩的插销
AutoFixedChaXiao chaXiao;
void Awake()
{
InitEvent();
}
void InitEvent()
{
trans_rodroot =this.transform.FindChildTrans("Trans_RodRoot").GetComponent<Transform>();
trans_first =this.transform.FindChildTrans("Trans_First").GetComponent<Transform>();
//firstRobLength = trans_first.GetComponent<MeshFilter>().mesh.bounds.size.z;
trans_second = this.transform.FindChildTrans("Trans_Second").GetComponent<Transform>();
//secondRobLength = trans_second.GetComponent<MeshFilter>().mesh.bounds.size.z;
maxLength = firstRobLength + secondRobLength - stretchLength;
minLength = firstRobLength + compressLength;
simpleDoor = targetpoint.GetComponentInParent<SimpleDoor>();
chaXiao = this.GetComponentInChildren<AutoFixedChaXiao>();
chaXiao.FixatorStateChanged += ChaXiao_FixatorStateChanged;
}
private void ChaXiao_FixatorStateChanged(FixatorStateEnum arg0)
{
switch (arg0)
{
case FixatorStateEnum.Locking:
simpleDoor.KeepNowAngle();
break;
case FixatorStateEnum.UnLocking:
simpleDoor.ReturnDefultLimit();
break;
default:
break;
}
}
private void FixedUpdate()
{
trans_rodroot.transform.LookAt(targetpoint.position);
float distance= Vector3.Distance(trans_rodroot.position, targetpoint.position);
if (distance >= maxLength)
{
TriggerLimitAction?.Invoke(DisLimitType.TooLong);
}
else if(distance<=minLength)
{
TriggerLimitAction?.Invoke(DisLimitType.TooShort);
}
distance = Mathf.Clamp(distance, minLength, maxLength);
float targetValue = distance - minLength+ compressLength;
trans_second.localPosition = trans_first.localPosition + new Vector3(0,0, targetValue);
if (chaXiao)
chaXiao.rodPos = trans_second.localPosition.z;
}
}
//长度超限
public enum DisLimitType
{
//过长
TooLong,
//过短
TooShort,
}