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