Untitled
unknown
plain_text
2 years ago
4.0 kB
20
Indexable
using UnityEngine; public class TankController : MonoBehaviour { public int m_PlayerNumber = 1; // Used to identify which tank belongs to which player. This is set by this tank's manager. public float m_Speed = 12f; // How fast the tank moves forward and back. public float m_TurnSpeed = 180f; // How fast the tank turns in degrees per second. public AudioSource m_MovementAudio; // Reference to the audio source used to play engine sounds. NB: different to the shooting audio source. // public AudioClip m_EngineIdling; // Audio to play when the tank isn't moving. // public AudioClip m_EngineDriving; // Audio to play when the tank is moving. public float m_PitchRange = 0.2f; // The amount by which the pitch of the engine noises can vary. private string m_MovementAxisName; // The name of the input axis for moving forward and back. private string m_TurnAxisName; // The name of the input axis for turning. private Rigidbody m_Rigidbody; // Reference used to move the tank. private float m_MovementInputValue; // The current value of the movement input. private float m_TurnInputValue; // The current value of the turn input. private float m_OriginalPitch; // The pitch of the audio source at the start of the scene. private void Awake() { m_Rigidbody = GetComponent<Rigidbody>(); } private void OnEnable() { // When the tank is turned on, make sure it's not kinematic. m_Rigidbody.isKinematic = false; // Also reset the input values. m_MovementInputValue = 0f; m_TurnInputValue = 0f; } private void OnDisable() { // When the tank is turned off, set it to kinematic so it stops moving. m_Rigidbody.isKinematic = true; } private void Start() { // The axes names are based on player number. m_MovementAxisName = "CarroV" ; m_TurnAxisName = "CarroH"; // Store the original pitch of the audio source. } private void Update() { // Store the value of both input axes. m_MovementInputValue = Input.GetAxis(m_MovementAxisName); m_TurnInputValue = Input.GetAxis(m_TurnAxisName); EngineAudio(); } private void EngineAudio() { } private void FixedUpdate() { // Adjust the rigidbodies position and orientation in FixedUpdate. /* if (Input.GetKey(KeyCode.Keypad8) || !Input.GetKey(KeyCode.Keypad2) || !Input.GetKey(KeyCode.Keypad4) || !Input.GetKey(KeyCode.Keypad6)) { m_Rigidbody.isKinematic = true; } */ Move(); Turn(); } private void Move() { //m_Rigidbody.isKinematic = false; // Create a vector in the direction the tank is facing with a magnitude based on the input, speed and the time between frames. Vector3 movement = transform.forward * m_MovementInputValue * m_Speed * Time.deltaTime; // Apply this movement to the rigidbody's position. m_Rigidbody.MovePosition(m_Rigidbody.position + movement); } private void Turn() { // m_Rigidbody.isKinematic = false; // Determine the number of degrees to be turned based on the input, speed and time between frames. float turn = m_TurnInputValue * m_TurnSpeed * Time.deltaTime; // Make this into a rotation in the y axis. Quaternion turnRotation = Quaternion.Euler(0f, turn, 0f); // Apply this rotation to the rigidbody's rotation. m_Rigidbody.MoveRotation(m_Rigidbody.rotation * turnRotation); /* else { m_Rigidbody.isKinematic = true; }*/ } }
Editor is loading...