Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- using UnityEngine;
- public class DeplacementPersonnage : MonoBehaviour
- {
- [SerializeField] private float vitesseDeplacementMax = 50.0f;
- [SerializeField] private float acceleration = 10.0f;
- [SerializeField] private float vitesseRotation = 1f;
- [SerializeField] private float retourRotation = 0.5f;
- private float vitesseDeplacementActuelle = 0.0f;
- private Vector3 lastMousePos;
- private Quaternion rotationCible = Quaternion.Euler(-90f, 0f, 0f);
- private Rigidbody rb;
- private void Start()
- {
- lastMousePos = Input.mousePosition;
- rb = GetComponent<Rigidbody>();
- rb.freezeRotation = true;
- }
- private void FixedUpdate()
- {
- UpdateMovement();
- RotateShipWithMouse();
- lastMousePos = Input.mousePosition;
- }
- private void UpdateMovement()
- {
- float tempsPasse = Time.deltaTime;
- vitesseDeplacementActuelle = Mathf.MoveTowards(vitesseDeplacementActuelle, vitesseDeplacementMax, acceleration * tempsPasse);
- float deplacementHautBas = -Input.GetAxis("Vertical") * vitesseDeplacementActuelle * tempsPasse; // Rotation de base du vaisseau : -90;0;0 donc pour avancer il faut monter et inverser les tâches des touches Z et S
- float deplacementGaucheDroite = Input.GetAxis("Horizontal") * vitesseDeplacementActuelle * tempsPasse;
- rb.MovePosition(transform.position + transform.up * deplacementHautBas + transform.right * deplacementGaucheDroite);
- }
- private void RotateShipWithMouse()
- {
- Vector3 mousePos = Input.mousePosition;
- float rotationX = 0.0f;
- float rotationY = 0.0f;
- Vector3 deltaMousePos = mousePos - lastMousePos;
- if (deltaMousePos != Vector3.zero)
- {
- rotationX = Mathf.Clamp(-deltaMousePos.y, -1f, 1f) * vitesseRotation; // Inversion du mouvement haut/bas de la souris à cause rotation vaisseau
- rotationY = Mathf.Clamp(deltaMousePos.x, -1f, 1f) * vitesseRotation;
- }
- transform.Rotate(Vector3.up, rotationY, Space.World);
- transform.Rotate(Vector3.right, rotationX, Space.World);
- Quaternion rotationActuelle = transform.rotation;
- rotationCible = Quaternion.Euler(-90f, rotationActuelle.eulerAngles.y, rotationActuelle.eulerAngles.z);
- transform.rotation = Quaternion.Slerp(rotationActuelle, rotationCible, retourRotation * Time.deltaTime);
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement