|
|
- namespace VRTK.Examples
- {
- using UnityEngine;
-
- public class RC_Car : MonoBehaviour
- {
- public float maxAcceleration = 3f;
- public float jumpPower = 10f;
-
- private float acceleration = 0.05f;
- private float movementSpeed = 0f;
- private float rotationSpeed = 180f;
- private bool isJumping = false;
- private Vector2 touchAxis;
- private float triggerAxis;
- private Rigidbody rb;
- private Vector3 defaultPosition;
- private Quaternion defaultRotation;
-
- public void SetTouchAxis(Vector2 data)
- {
- touchAxis = data;
- }
-
- public void SetTriggerAxis(float data)
- {
- triggerAxis = data;
- }
-
- public void ResetCar()
- {
- transform.position = defaultPosition;
- transform.rotation = defaultRotation;
- }
-
- private void Awake()
- {
- rb = GetComponent<Rigidbody>();
- defaultPosition = transform.position;
- defaultRotation = transform.rotation;
- }
-
- private void FixedUpdate()
- {
- if (isJumping)
- {
- touchAxis.x = 0f;
- }
- CalculateSpeed();
- Move();
- Turn();
- Jump();
- }
-
- private void CalculateSpeed()
- {
- if (touchAxis.y != 0f)
- {
- movementSpeed += (acceleration * touchAxis.y);
- movementSpeed = Mathf.Clamp(movementSpeed, -maxAcceleration, maxAcceleration);
- }
- else
- {
- Decelerate();
- }
- }
-
- private void Decelerate()
- {
- if (movementSpeed > 0)
- {
- movementSpeed -= Mathf.Lerp(acceleration, maxAcceleration, 0f);
- }
- else if (movementSpeed < 0)
- {
- movementSpeed += Mathf.Lerp(acceleration, -maxAcceleration, 0f);
- }
- else
- {
- movementSpeed = 0;
- }
- }
-
- private void Move()
- {
- Vector3 movement = transform.forward * movementSpeed * Time.deltaTime;
- rb.MovePosition(rb.position + movement);
- }
-
- private void Turn()
- {
- float turn = touchAxis.x * rotationSpeed * Time.deltaTime;
- Quaternion turnRotation = Quaternion.Euler(0f, turn, 0f);
- rb.MoveRotation(rb.rotation * turnRotation);
- }
-
- private void Jump()
- {
- if (!isJumping && triggerAxis > 0)
- {
- float jumpHeight = (triggerAxis * jumpPower);
- rb.AddRelativeForce(Vector3.up * jumpHeight);
- triggerAxis = 0f;
- }
- }
-
- private void OnTriggerStay(Collider collider)
- {
- isJumping = false;
- }
-
- private void OnTriggerExit(Collider collider)
- {
- isJumping = true;
- }
- }
- }
|