In this code when i hold W the player is move on Z Global axis, but i want, when i press w to move on Local Z axis, How i can do that?, Thanks.
Or where is the mouse, like at Turning.
using UnityEngine;
using System.Collections;
public class PlayerMovement : MonoBehaviour
{
[System.Serializable]
public class PlayerSettings
{
public float speed = 6f;
public float runingSpeed = 10f;
}
[SerializeField]
[Tooltip("Player Settings")]
public PlayerSettings playerSettings;
[System.Serializable]
public class AnimationSettings
{
public string walkAnimBoolName = "IsWalking";
}
[SerializeField]
[Tooltip("Add the Walk animation Boolean Name from animator")]
public AnimationSettings playerAnimations;
[System.Serializable]
public class InputSettings
{
public string horizontalAxis = "Horizontal";
public string verticalAxis = "Vertical";
}
[SerializeField]
[Tooltip("Inputs")]
public InputSettings input;
[System.Serializable]
public class PlayerAttributes
{
public bool canRun = true;
}
[SerializeField]
[Tooltip("Set attribytes for Player")]
public PlayerAttributes playerAttributes;
[Tooltip("Floor layer")]
public LayerMask floorLayer;
Vector3 movement;
Animator anim;
Rigidbody playerRigidbody;
int floorMask;
float camRayLength = 100f;
private float curSpeed;
bool isRunning;
void Start()
{
curSpeed = playerSettings.speed;
isRunning = false;
}
void Awake()
{
floorMask = floorLayer;
anim = GetComponent<Animator>();
playerRigidbody = GetComponent<Rigidbody>();
}
void Update()
{
if (playerAttributes.canRun)
{
if (Input.GetButton("Run"))
{
isRunning = true;
}
else
{
isRunning = false;
}
}
if (isRunning)
{
curSpeed = playerSettings.runingSpeed;
}
else if (!isRunning)
{
curSpeed = playerSettings.speed;
}
}
bool IsGrounded()
{
return Physics.Raycast(transform.position, (Vector3.up * -1), 0f);
}
void FixedUpdate()
{
float h = Input.GetAxisRaw(input.horizontalAxis);
float v = Input.GetAxisRaw(input.verticalAxis);
Move(h, v);
Turning();
Animating(h, v);
}
void Move(float h, float v)
{
movement.Set(h, 0f, v);
movement = movement.normalized * curSpeed * Time.deltaTime;
playerRigidbody.MovePosition(transform.position + movement);
}
void Turning()
{
Ray camRay = Camera.main.ScreenPointToRay(Input.mousePosition);
RaycastHit floorHit;
if (Physics.Raycast(camRay, out floorHit, camRayLength, floorMask))
{
Vector3 playerToMouse = floorHit.point - transform.position;
playerToMouse.y = 0f;
Quaternion newRotation = Quaternion.LookRotation(playerToMouse);
playerRigidbody.MoveRotation(newRotation);
}
}
void Animating(float h, float v)
{
bool walking = h != 0f || v != 0f;
anim.SetBool(playerAnimations.walkAnimBoolName, walking);
}
}