|
|
- 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;
- }
- }
- }
- }
- }
|