using System.Collections; using System.Collections.Generic; using UnityEngine; public class CozmoMovement : MonoBehaviour { 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. 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 void Awake() { m_Rigidbody = GetComponent(); } private void OnEnable() { // When the cozmo 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 cozmo is turned off, set it to kinematic so it stops moving. m_Rigidbody.isKinematic = true; } private void Start() { m_MovementAxisName = "Vertical"; m_TurnAxisName = "Horizontal"; } private void Update() { // Store the value of both input axes. m_MovementInputValue = Input.GetAxis(m_MovementAxisName); m_TurnInputValue = Input.GetAxis(m_TurnAxisName); } private void FixedUpdate() { // Adjust the rigidbodies position and orientation in FixedUpdate. Move(); Turn(); } public void Move(float directionValue) { // Create a vector in the direction the cozmo is facing with a magnitude based on the input, speed and the time between frames. Vector3 movement = directionValue * transform.forward * m_Speed * Time.deltaTime; // Apply this movement to the rigidbody's position. m_Rigidbody.MovePosition(m_Rigidbody.position + movement); } public void Move() { Move(m_MovementInputValue); } //public void Move(float[] act) //{ //} public void Turn() { Turn(m_TurnInputValue); } public void Turn(float turnValue) { // Determine the number of degrees to be turned based on the input, speed and time between frames. float turn = turnValue * 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); } }