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

62 lines
1.8 KiB
C#

namespace VRTK.Examples
{
using UnityEngine;
public class Zipline : VRTK_InteractableObject
{
[Header("Zipline Options", order = 4)]
public float downStartSpeed = 0.2f;
public float acceleration = 1.0f;
public float upSpeed = 1.0f;
public Transform handleEndPosition;
public Transform handleStartPosition;
public GameObject handle;
private bool isMoving = false;
private bool isMovingDown = true;
private float currentSpeed;
public override void OnInteractableObjectGrabbed(InteractableObjectEventArgs e)
{
base.OnInteractableObjectGrabbed(e);
isMoving = true;
}
protected override void Awake()
{
base.Awake();
currentSpeed = downStartSpeed;
}
protected override void Update()
{
base.Update();
if (isMoving)
{
Vector3 moveAmount;
if(isMovingDown)
{
currentSpeed += acceleration * Time.deltaTime;
moveAmount = Vector3.down * currentSpeed * Time.deltaTime;
}
else
{
moveAmount = Vector3.up * upSpeed * Time.deltaTime;
}
handle.transform.localPosition += moveAmount;
if((isMovingDown && handle.transform.localPosition.y <= handleEndPosition.localPosition.y) ||
(!isMovingDown && handle.transform.localPosition.y >= handleStartPosition.localPosition.y))
{
isMoving = false;
isMovingDown = !isMovingDown;
currentSpeed = downStartSpeed;
}
}
}
}
}