unityzgy/Assets/ThirdPackages/VRPackage/VRTK/Examples/ExampleResources/Scripts/Controller_Hand.cs
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

81 lines
2.9 KiB
C#

namespace VRTK.Examples
{
using UnityEngine;
public class Controller_Hand : MonoBehaviour
{
public enum Hands
{
Right,
Left
}
public Hands hand = Hands.Right;
private Transform pointerFinger;
private Transform gripFingers;
private float maxRotation = 90f;
private float originalPointerRotation;
private float originalGripRotation;
private float targetPointerRotation;
private float targetGripRotation;
private void Start()
{
GetComponentInParent<VRTK_InteractGrab>().GrabButtonPressed += DoGrabOn;
GetComponentInParent<VRTK_InteractGrab>().GrabButtonReleased += DoGrabOff;
GetComponentInParent<VRTK_InteractUse>().UseButtonPressed += DoUseOn;
GetComponentInParent<VRTK_InteractUse>().UseButtonReleased += DoUseOff;
var handContainer = "ModelPieces";
pointerFinger = transform.Find(handContainer + "/PointerFingerContainer");
gripFingers = transform.Find(handContainer + "/GripFingerContainer");
if (hand == Hands.Left)
{
InversePosition(pointerFinger);
InversePosition(gripFingers);
InversePosition(transform.Find(handContainer + "/Palm"));
InversePosition(transform.Find(handContainer + "/Thumb"));
}
originalPointerRotation = pointerFinger.localEulerAngles.y;
originalGripRotation = gripFingers.localEulerAngles.y;
targetPointerRotation = originalPointerRotation;
targetGripRotation = originalGripRotation;
}
private void InversePosition(Transform givenTransform)
{
givenTransform.localPosition = new Vector3(givenTransform.localPosition.x * -1, givenTransform.localPosition.y, givenTransform.localPosition.z);
givenTransform.localEulerAngles = new Vector3(givenTransform.localEulerAngles.x, givenTransform.localEulerAngles.y * -1, givenTransform.localEulerAngles.z);
}
private void DoGrabOn(object sender, ControllerInteractionEventArgs e)
{
targetGripRotation = maxRotation;
}
private void DoGrabOff(object sender, ControllerInteractionEventArgs e)
{
targetGripRotation = originalGripRotation;
}
private void DoUseOn(object sender, ControllerInteractionEventArgs e)
{
targetPointerRotation = maxRotation;
}
private void DoUseOff(object sender, ControllerInteractionEventArgs e)
{
targetPointerRotation = originalPointerRotation;
}
private void Update()
{
pointerFinger.localEulerAngles = new Vector3(targetPointerRotation, 0f, 0f);
gripFingers.localEulerAngles = new Vector3(targetGripRotation, 0f, 0f);
}
}
}