You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
47 lines
1.7 KiB
47 lines
1.7 KiB
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); |
|
} |
|
} |
|
} |
|
}
|
|
|