Heureux de voir ton souci résolu.
Quelques petites choses comme tu dis que tu débutes :
1) Quand je crée un script pour un objet, la 1ère chose que je fais, c'est de mettre Debug.Log("Start") dans la fonction Start et de ne tester que cela. A 2 heures du matin, les choses les plus simples sont parfois peu évidentes.
2) Petite coquille pour le nom d'une classe.
Pour nommer les identifiants, il y a des conventions. Une de celles utilisées est celle de Microsoft. Visual Studio "couine" quand cette convention n'est pas respectée :
- les noms de classes, de méthodes et de propriétés commencent par une majuscule ;
- les noms de variables commencent par une minuscule ;
Donc
3) On évite les méthodes couteuses dans les méthodes Update, FixedUpdate, et LateUpdate.
Dans le script PlayerMovment, la méthode Update contient ceci :
Toutes les méthodes Find sont couteuses (y compris Camera.main qui cache un appel à FindGameObjectsWithTag jusqu'à Unity 2019.3).
Bon ici, le code n'est exécuté qu'une fois, cela n'a aucune incidence.
En général, on "cache" le résultat une bonne fois pour toutes :
Code : Tout sélectionner
public class PlayerMovment : MonoBehaviour
{
private GameManager gameManager;
...
private void Start ()
{
gameManager = FindObjectOfType<gameManager>();
// Mise en cache.
if (gameManager == null)
{
Debug.LogError("GameManager introuvable.");
}
}
private void Update ()
{
...
if (rb.position.y < -1f)
{
gameManager.EndGame ();
}
}
}