Game over peut être défini de manière défavorable via un objet de jeu. Un gestionnaire de jeu est utile pour cela.
Créez un objet dans la fenêtre de hiérarchie, cliquez avec le bouton droit sur le composant de transformation dans la fenêtre d'inspection et définissez-le sur Réinitialiser. Nommez ensuite l'objet en tant que GameManager.
Ajoutez un nouveau composant et nommez-le GameManager. Ce composant est responsable du changement de statut dans le jeu. Le jeu peut être démarré, arrêté ou redémarré via le Game Manager. Un compteur de score peut également être placé. Le but du nouveau script dans ce cas est de redémarrer le jeu lorsque vous terminez le jeu.
Créez votre propre nouvelle fonction :
fin de partie vide
Vous avez besoin d'un moyen d'accéder au GameManager et d'appeler la fonction.
Avec l'ajout Debug.Log ("GAME OVER"); envoyer "Game Over" en sortie à la console Unity et voir si la fonction est appelée au bon moment.
Pour pouvoir accéder à la fonction, vous avez besoin du Player Collision Script du lecteur.
Ajoutez-y un composant pour le Game Manager :
GameManager public GameManager ;
Ensuite, créez un préfabriqué de votre personnage. Supprimez ensuite le lecteur de votre scène. Faites glisser le joueur dans la scène et vous verrez que le joueur n'est pas lié au GameManager.
En fin de compte, vous n'utilisez pas de variable dans ce cas, mais supprimez-la à nouveau.
Vous utilisez pour trouver le GameManager :
RechercherObjetDeType ();
Vous l'insérez à l'endroit où vous souhaitez que le jeu se termine.
A une fonction similaire : GetComponent <>
Changement dans le script du GameManager
fin de partie vide
zu
vide public Fin de partie
Vous pouvez maintenant effectuer la modification dans le script PlayerCollision.
Avec MainCamera et TextCanvas, vous devez maintenant faire glisser le lecteur pour qu'une référence au lecteur soit créée. Sinon, vous obtiendrez un message d'erreur.
De plus, Game Over devrait s'afficher si le personnage tombe d'une plate-forme, par exemple.
Le prérequis est créé dans le script PlayerMovement. Si le joueur est en dessous d'une certaine valeur sur un axe, Game Over s'affiche.
Dans le script PlayerMovement, ajoutez ceci à FixedUpdate :
si (rb.position.y <-1f)
{
RechercherObjetDeType () .Fin du jeu ();
}
Le script PlayerMovement ressemble alors à ceci :
Game Over ne devrait désormais être affiché qu'une seule fois.
Pour cela, une modification est apportée dans le GameManager :
bool gameHasEnded = faux ;
Sous le vide public vient :
si (gameHasEnded == faux)
{
gameHasEnded = vrai;
Debug.Log ("Game Over");
}
Cela ne termine le jeu qu'une seule fois :
Enfin le jeu doit être redémarré :
Ceci est inséré dans le GameManager :
Vous avez besoin d'annuler le redémarrage () en tant que fonction distincte.
Sous Debug.Log, vous ajoutez :
Redémarrage ();
Une autre fonction que vous insérez sous UnityEngine est :
en utilisant UnityEngine.SceneManagement ;
Ceci est utilisé pour d'autres scènes ou pour le redémarrage de la scène.
Maintenant, vous ajoutez les accolades sous void Redémarrer :
SceneManager.LoadScene (SceneManager.GetActiveScene (). Nom);
Cela signifie que vous rechargez la scène active à partir du gestionnaire de scènes.
.name représente le nom actuel de votre scène.
Le redémarrage du jeu se fait très rapidement en ce moment.
C'est pourquoi nous ouvrons Lighting in Unity. Si vous modifiez quelque chose dans votre jeu, il est logique de recalculer les effets d'éclairage. Choisissez Construire un éclairage.
Vous utilisez maintenant de nouveaux paramètres :
Remplacez Restart par Invoke ("Redémarrer") dans le script GameManager. Après cela, vous mettez le temps qui doit s'écouler avant que la fonction "Redémarrer" ne soit appelée.
Invoquer (« Redémarrer », 2f);
Le délai est maintenant rendu variable.
Sous bool ajouter :
public float restartDelay = 1f ;
Au lieu du 2f ci-dessous, vous définissez maintenant la variable.
Le script terminé ressemble à ceci :
Publié à l'origine le 2020-06-08 18:56:00.