Lorsque vous apprenez les bases de l'Unreal Engine, vous devez vous familiariser avec le fonctionnement du cadre de gameplay Unreal. Dans ce document, nous allons voir comment configurer les classes de mode de jeu et d'état de jeu pour Parrot.
Mode de jeu
Le mode de jeu est chargé de définir les règles fondamentales du jeu, comme le nombre de joueurs ou la manière dont les joueurs rejoignent la partie. Il fournit également un cadre pour configurer des classes de jeu utiles, comme l'état de jeu, le contrôleur de joueur, l'ATH et la classe de pion par défaut.
Pour configurer le mode de jeu pour Parrot, procédez comme suit :
Dans le navigateur de contenu, cliquez sur Contenu > Blueprints > Jeu.
Faites un clic droit dans le navigateur et cliquez sur Classe de blueprint.
Définissez la classe parente sur AGameModeBase.
Nommez la classe "BP_ParrotGameMode".
Double-cliquez sur le blueprint que vous venez de créer pour voir les classes de base qu'il définit. Pour Parrot, certaines de ces classes doivent être modifiées :
Définissez Game State Class sur BP_ParrotGameState.
Définissez Player Controller Class sur BP_ParrotPlayerController.
Définissez HUD Class sur BP_ParrotHUD.
Définissez Default Pawn Class sur BP_ParrotPlayerCharacter.
Allez dans Modifier > Paramètres du projet > Cartes et modes et réglez Mode de jeu par défaut sur BP_ParrotGameMode.
Maintenant que le mode de jeu est configuré, vous pouvez configurer l'état de jeu.
État de jeu
L'état de jeu gère ce qui se passe actuellement dans le jeu. Il traite les informations que les clients ont besoin de connaître, mais qui ne sont pas liées à un joueur spécifique. Par exemple, vous pouvez stocker les résultats des équipes ici.
Pour créer un état de jeu pour Parrot, procédez comme suit :
Dans l'éditeur principal, sélectionnez Outils > Nouvelle classe C++...
Définissez la classe parente sur AGameStateBase.
Nommez la classe "AParrotGameState".
Dans le navigateur de contenu, cliquez sur + Ajouter > Classe de blueprint.
Définissez la classe parente sur AParrotGameState.
Nommez la classe "BP_ParrotGameState".
Dans votre blueprint de mode de jeu, attribuez BP_ParrotGameState au champ d'état de jeu.
Concept de mode de jeu et d'état de jeu
Pour plus d'informations sur le mode de jeu et l'état de jeu, consultez Mode de jeu et état de jeu. À mesure que vous créez de nouvelles classes au cours du développement, n'oubliez pas de mettre à jour votre mode de jeu et votre état de jeu.
Le mode de jeu peut également être paramétré par carte. Le menu principal de Parrot utilise un mode de jeu différent de celui qui est utilisé par les niveaux du jeu.
Instance de jeu
L'instance de jeu est une classe unique et persistante du moteur qui gère des fonctionnalités spécifiques au projet. Elle existe pendant toute la durée de vie de votre jeu. Elle contient le client du hublot du jeu et le joueur local.
En suivant le même schéma que pour le mode et l'état de jeu, créez une classe C++ de base, UParrotGameInstance, et une classe de blueprint, BP_ParrotGameInstance. Vous pouvez définir la classe d'instance de jeu pour votre projet sous Modifier > Paramètres du projet > Cartes et modes.
Pour créer une instance de jeu pour Parrot, procédez comme suit :
Dans l'éditeur principal, sélectionnez Outils > Nouvelle classe C++...
Définissez la classe parente sur UGameInstance.
Nommez la classe "UParrotGameInstance".
Dans le navigateur de contenu, cliquez sur + Ajouter > Classe de blueprint.
Définissez la classe parente sur UParrotGameInstance.
Nommez la classe "BP_ParrotGameInstance".
Allez dans Modifier > Paramètres du projet > Cartes et modes, puis définissez la classe d'instance de jeu sur BP_ParrotGameInstance.
Exemple : chargement de niveau en temps réel
Dans Parrot, différentes cartes sont spécifiques à différents modes de jeu, et l'instance de jeu indique au jeu quelle carte doit être chargée à l'aide des fichiers UParrotMapDataAsset. Il s'agit de ressources de données qui contiennent une référence différée à un fichier de carte. Ces ressources sont organisées sur l'instance de jeu et le joueur peut les parcourir à mesure qu'il progresse dans le jeu. Comme il s'agit de l'instance de jeu, vous pouvez toujours charger dynamiquement le niveau suivant depuis n'importe où. Le contrôleur de joueur est à l'écoute des changements d'état de jeu et fait appel à l'instance de jeu si nécessaire.
La capture d'écran suivante montre un blueprint qui utilise le nœud Stream Level et le nœud Async Load Asset pour charger de manière asynchrone la référence différée d'un objet dans une ParrotMapDataAsset. Ensuite, le nœud Open Level est appelé sans avoir à attendre un chargement synchrone, puisque le niveau a déjà été chargé. Le plug-in CommonLoadingScreen est également utilisé ici. Le widget d'écran de chargement est invoqué lors du préchargement de la carte suivante et supprimé après le chargement.
Pour plus d'informations sur l'écran de chargement et la raison pour laquelle Parrot effectue un chargement asynchrone au lieu d'un chargement synchrone ici, consultez la rubrique L'interface utilisateur dans Parrot.