Re,
je n'ai pas remarqué que la vitesse sur la diagonale est différente de celle sur les côtés. En fait, elle ne varie (du moins dans le code que tu as fourni). Pour t'en convaincre, ajoute un champ UI Text (GameObject > UI > Text), place le à un endroit de l'écran où il ne te gêne pas, et ajoute ceci dans ton code :
Code : Tout sélectionner
using UnityEngine.UI;
public class PlayerController : MonoBehaviour
{
[SerializeField] private Text rigidbodySpeed = null;
private void Update ()
{
rigidbodySpeed.text = $"{player.velocity.magnitude.ToString ("0.00")}";
}
}
En revanche, je confirme ce que j'ai écrit précédemment : ton champ speed à 4f ne sert à rien dans ton code. Passe le en public pour le modifier dans l'inspecteur en mode Play, modifie-le en cours de jeu et observe le comportement de la vitesse du rigidbody affichée à l'écran : elle ne change pas. Tu dois déplacer la multiplication par la vitesse dans la ligne dans laquelle tu modifies la vélocité.
Je te propose le code suivant (j'ai modifié movement en direction, c'est plus cohérent il me semble) :
Code : Tout sélectionner
using UnityEngine;
using UnityEngine.UI;
public class PlayerController : MonoBehaviour
{
[SerializeField] private Text rigidbodySpeed = null;
[SerializeField] private float speed = 4f;
private Vector3 direction = Vector3.zero;
private Rigidbody player;
private void Start ()
{
player = GetComponent<Rigidbody> ();
}
private void Update ()
{
rigidbodySpeed.text = $"Rigidbody speed : {player.velocity.magnitude.ToString ("0.00")}";
float h = Input.GetAxis ("Horizontal");
float v = Input.GetAxis ("Vertical");
direction = new Vector3 (h, 0, v);
direction.Normalize ();
//movement = transform.InverseTransformDirection (movement); Ne sert à rien pour mes tests.
}
void FixedUpdate ()
{
player.velocity = direction * speed;
}
}