| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647 |
- using System;
- using UnityEngine;
- namespace UnityStandardAssets.Vehicles.Ball
- {
- public class Ball : MonoBehaviour
- {
- [SerializeField] private float m_MovePower = 5; // The force added to the ball to move it.
- [SerializeField] private bool m_UseTorque = true; // Whether or not to use torque to move the ball.
- [SerializeField] private float m_MaxAngularVelocity = 25; // The maximum velocity the ball can rotate at.
- [SerializeField] private float m_JumpPower = 2; // The force added to the ball when it jumps.
- private const float k_GroundRayLength = 1f; // The length of the ray to check if the ball is grounded.
- private Rigidbody m_Rigidbody;
- private void Start()
- {
- m_Rigidbody = GetComponent<Rigidbody>();
- // Set the maximum angular velocity.
- GetComponent<Rigidbody>().maxAngularVelocity = m_MaxAngularVelocity;
- }
- public void Move(Vector3 moveDirection, bool jump)
- {
- // If using torque to rotate the ball...
- if (m_UseTorque)
- {
- // ... add torque around the axis defined by the move direction.
- m_Rigidbody.AddTorque(new Vector3(moveDirection.z, 0, -moveDirection.x)*m_MovePower);
- }
- else
- {
- // Otherwise add force in the move direction.
- m_Rigidbody.AddForce(moveDirection*m_MovePower);
- }
- // If on the ground and jump is pressed...
- if (Physics.Raycast(transform.position, -Vector3.up, k_GroundRayLength) && jump)
- {
- // ... add force in upwards.
- m_Rigidbody.AddForce(Vector3.up*m_JumpPower, ForceMode.Impulse);
- }
- }
- }
- }
|