unityzgy/.svn/pristine/4c/4c16a783b36795767b4b8c87ac3e95e38e79ea43.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

63 lines
2.3 KiB
Plaintext

// Teleport Disable On Controller Obscured|Locomotion|20050
namespace VRTK
{
using UnityEngine;
using System.Collections;
/// <summary>
/// The purpose of the Teleport Disable On Controller Obscured script is to detect when the headset does not have a line of sight to the controllers and prevent teleportation from working. This is to ensure that if a user is clipping their controllers through a wall then they cannot teleport to an area beyond the wall.
/// </summary>
[RequireComponent(typeof(VRTK_HeadsetControllerAware))]
[AddComponentMenu("VRTK/Scripts/Locomotion/VRTK_TeleportDisableOnControllerObscured")]
public class VRTK_TeleportDisableOnControllerObscured : MonoBehaviour
{
protected VRTK_BasicTeleport basicTeleport;
protected VRTK_HeadsetControllerAware headset;
protected virtual void OnEnable()
{
basicTeleport = GetComponent<VRTK_BasicTeleport>();
StartCoroutine(EnableAtEndOfFrame());
}
protected virtual void OnDisable()
{
if (basicTeleport == null)
{
return;
}
if (headset)
{
headset.ControllerObscured -= new HeadsetControllerAwareEventHandler(DisableTeleport);
headset.ControllerUnobscured -= new HeadsetControllerAwareEventHandler(EnableTeleport);
}
}
protected virtual IEnumerator EnableAtEndOfFrame()
{
if (basicTeleport == null)
{
yield break;
}
yield return new WaitForEndOfFrame();
headset = VRTK_ObjectCache.registeredHeadsetControllerAwareness;
if (headset)
{
headset.ControllerObscured += new HeadsetControllerAwareEventHandler(DisableTeleport);
headset.ControllerUnobscured += new HeadsetControllerAwareEventHandler(EnableTeleport);
}
}
protected virtual void DisableTeleport(object sender, HeadsetControllerAwareEventArgs e)
{
basicTeleport.ToggleTeleportEnabled(false);
}
protected virtual void EnableTeleport(object sender, HeadsetControllerAwareEventArgs e)
{
basicTeleport.ToggleTeleportEnabled(true);
}
}
}