Advertisement
Guest User

Untitled

a guest
Dec 1st, 2023
90
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.43 KB | None | 0 0
  1. using UnityEngine;
  2.  
  3. public class DeplacementPersonnage : MonoBehaviour
  4. {
  5. [SerializeField] private float vitesseDeplacementMax = 50.0f;
  6. [SerializeField] private float acceleration = 10.0f;
  7. [SerializeField] private float vitesseRotation = 1f;
  8. [SerializeField] private float retourRotation = 0.5f;
  9.  
  10. private float vitesseDeplacementActuelle = 0.0f;
  11. private Vector3 lastMousePos;
  12. private Quaternion rotationCible = Quaternion.Euler(-90f, 0f, 0f);
  13. private Rigidbody rb;
  14.  
  15. private void Start()
  16. {
  17. lastMousePos = Input.mousePosition;
  18. rb = GetComponent<Rigidbody>();
  19. rb.freezeRotation = true;
  20. }
  21.  
  22. private void FixedUpdate()
  23. {
  24. UpdateMovement();
  25. RotateShipWithMouse();
  26. lastMousePos = Input.mousePosition;
  27. }
  28.  
  29. private void UpdateMovement()
  30. {
  31. float tempsPasse = Time.deltaTime;
  32.  
  33. vitesseDeplacementActuelle = Mathf.MoveTowards(vitesseDeplacementActuelle, vitesseDeplacementMax, acceleration * tempsPasse);
  34.  
  35. 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
  36. float deplacementGaucheDroite = Input.GetAxis("Horizontal") * vitesseDeplacementActuelle * tempsPasse;
  37.  
  38. rb.MovePosition(transform.position + transform.up * deplacementHautBas + transform.right * deplacementGaucheDroite);
  39. }
  40.  
  41. private void RotateShipWithMouse()
  42. {
  43. Vector3 mousePos = Input.mousePosition;
  44.  
  45. float rotationX = 0.0f;
  46. float rotationY = 0.0f;
  47.  
  48. Vector3 deltaMousePos = mousePos - lastMousePos;
  49.  
  50. if (deltaMousePos != Vector3.zero)
  51. {
  52. rotationX = Mathf.Clamp(-deltaMousePos.y, -1f, 1f) * vitesseRotation; // Inversion du mouvement haut/bas de la souris à cause rotation vaisseau
  53. rotationY = Mathf.Clamp(deltaMousePos.x, -1f, 1f) * vitesseRotation;
  54. }
  55.  
  56. transform.Rotate(Vector3.up, rotationY, Space.World);
  57. transform.Rotate(Vector3.right, rotationX, Space.World);
  58.  
  59. Quaternion rotationActuelle = transform.rotation;
  60. rotationCible = Quaternion.Euler(-90f, rotationActuelle.eulerAngles.y, rotationActuelle.eulerAngles.z);
  61. transform.rotation = Quaternion.Slerp(rotationActuelle, rotationCible, retourRotation * Time.deltaTime);
  62. }
  63. }
  64.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement