unityzgy/.svn/pristine/6f/6fbc18194bf109f93f620ce81355155f88f575eb.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

198 lines
4.4 KiB
Plaintext

//======= Copyright (c) Valve Corporation, All rights reserved. ===============
//
// Purpose: Highlights the controller when hovering over interactables
//
//=============================================================================
using UnityEngine;
using System.Collections;
namespace Valve.VR.InteractionSystem
{
//-------------------------------------------------------------------------
public class ControllerHoverHighlight : MonoBehaviour
{
public Material highLightMaterial;
public bool fireHapticsOnHightlight = true;
private Hand hand;
private MeshRenderer bodyMeshRenderer;
private MeshRenderer trackingHatMeshRenderer;
private SteamVR_RenderModel renderModel;
private bool renderModelLoaded = false;
SteamVR_Events.Action renderModelLoadedAction;
//-------------------------------------------------
void Start()
{
hand = GetComponentInParent<Hand>();
}
//-------------------------------------------------
void Awake()
{
renderModelLoadedAction = SteamVR_Events.RenderModelLoadedAction( OnRenderModelLoaded );
}
//-------------------------------------------------
void OnEnable()
{
renderModelLoadedAction.enabled = true;
}
//-------------------------------------------------
void OnDisable()
{
renderModelLoadedAction.enabled = false;
}
//-------------------------------------------------
private void OnHandInitialized( int deviceIndex )
{
renderModel = gameObject.AddComponent<SteamVR_RenderModel>();
renderModel.SetDeviceIndex( deviceIndex );
renderModel.updateDynamically = false;
}
//-------------------------------------------------
private void OnRenderModelLoaded( SteamVR_RenderModel renderModel, bool success )
{
if ( renderModel != this.renderModel )
{
return;
}
Transform bodyTransform = transform.Find( "body" );
if ( bodyTransform != null )
{
bodyTransform.gameObject.layer = gameObject.layer;
bodyTransform.gameObject.tag = gameObject.tag;
bodyMeshRenderer = bodyTransform.GetComponent<MeshRenderer>();
bodyMeshRenderer.material = highLightMaterial;
bodyMeshRenderer.enabled = false;
}
Transform trackingHatTransform = transform.Find( "trackhat" );
if ( trackingHatTransform != null )
{
trackingHatTransform.gameObject.layer = gameObject.layer;
trackingHatTransform.gameObject.tag = gameObject.tag;
trackingHatMeshRenderer = trackingHatTransform.GetComponent<MeshRenderer>();
trackingHatMeshRenderer.material = highLightMaterial;
trackingHatMeshRenderer.enabled = false;
}
foreach ( Transform child in transform )
{
if ( ( child.name != "body" ) && ( child.name != "trackhat" ) )
{
Destroy( child.gameObject );
}
}
renderModelLoaded = true;
}
//-------------------------------------------------
private void OnParentHandHoverBegin( Interactable other )
{
if ( !this.isActiveAndEnabled )
{
return;
}
if ( other.transform.parent != transform.parent )
{
ShowHighlight();
}
}
//-------------------------------------------------
private void OnParentHandHoverEnd( Interactable other )
{
HideHighlight();
}
//-------------------------------------------------
private void OnParentHandInputFocusAcquired()
{
if ( !this.isActiveAndEnabled )
{
return;
}
if ( hand.hoveringInteractable && hand.hoveringInteractable.transform.parent != transform.parent )
{
ShowHighlight();
}
}
//-------------------------------------------------
private void OnParentHandInputFocusLost()
{
HideHighlight();
}
//-------------------------------------------------
public void ShowHighlight()
{
if ( renderModelLoaded == false )
{
return;
}
if ( fireHapticsOnHightlight )
{
hand.controller.TriggerHapticPulse( 500 );
}
if ( bodyMeshRenderer != null )
{
bodyMeshRenderer.enabled = true;
}
if ( trackingHatMeshRenderer != null )
{
trackingHatMeshRenderer.enabled = true;
}
}
//-------------------------------------------------
public void HideHighlight()
{
if ( renderModelLoaded == false )
{
return;
}
if ( fireHapticsOnHightlight )
{
hand.controller.TriggerHapticPulse( 300 );
}
if ( bodyMeshRenderer != null )
{
bodyMeshRenderer.enabled = false;
}
if ( trackingHatMeshRenderer != null )
{
trackingHatMeshRenderer.enabled = false;
}
}
}
}