Skip to content

Latest commit

 

History

History
72 lines (43 loc) · 5.16 KB

design.md

File metadata and controls

72 lines (43 loc) · 5.16 KB

Architecture

Introduction

Ce document a pour but d'expliquer la manière dont le code est structuré. Avec les règles respectées pour avoir un développement en équipe de manière optimale.

Règles d'architecture

Chaque fonctionnalité est un package correctement nommé, par exemple tous ce qui concerne le personnage du joueur sera dans assets/scripts/player. Package

Chaque animation du personnage, des ennemies ou de certain objet est le défilement de plusieurs sprites situé dans le dossier ‘assets/Sprites’, l’ensemble des animations de ces sprites est dans ‘assets/Animations’. Il y a donc plusieurs animations de créer pour le personnage comme par exemple la marche ou l’état repos de même pour les ennemies. Animator Animator Animator

Un animator est créé à partir des animations et regroupe la totalité des animations liés à une unité avec différent transition entre chaque animation. Animator

L'architecture de ce projet se base principalement sur le modèle SOLID (single class responsibility ...), ce qui nous permet d'avoir un code facile à comprendre, maintenable et réutilisable dans d'autres futures projets.

Modèle statique

Afin de définir la structure de base des assets du projet sous Unity, nous avons utilisé ce repository : Unity-Directory-Structure

Le joueur et l'IA utilisent des classes communes et génériques : les classes Character. CharacterRaycaster : permet de détecter l'objet interactif le plus proche (null si pas d'objet ou trop loin) du player ou de l'IA. L'objet interactif est envoyé à CharacterInteraction CharacterInteraction : Attend les actions du joueur ou de l'IA. Les actions peuvent être : attaquer, utiliser, prendre. CharacterController : Permet de faire bouger le joueur ou l'IA Inventory : Inventaire de l'IA ou du joueur, contient les objets Catchables Animator : Lance les animations en fonction des actions Diagramme de classes de la partie Character, Player et IA: Character

Les objets Unity contenant une classe qui hérite de Interactive sera détecté par CharactereRaycaster afin d'y effectuer des actions : Utiliser pour les objets Activables et prendre pour les objets Catchables. Toutes les propriétés public de ces classes sont des paramètres modifiables dans l'inspecteur de Unity. Grâce à ces classes, nous avons pu créer des Prefabs pour les objets Interactifs. Diagramme de classes de la partie Interaction : Interaction

Génération procédurales

La génération prcocédurale est divisée en 5 parties:

1ère partie

Génération des salles dans un tableau a deux dimensions de Room qui est la version simplifier de RoomInstance pour avoir une génération plus rapide et avoir l'essentiel pour la suite. Le générateur essaye de mettre le moins de salle possible collée afin de faire un dongeon en mode couloir, mais tout en ayant certaines zones avec plus de salle collées.

2ème partie

Le générateur cherche les pièces adjacentes pour chaque pièce et complète la classe room pour afficher les portes ou non sur la map.

3ème partie

Le générateur cherche des emplacements dans zones où il existe qu'une seule salle adjacente. Il place la salle du boss, puis les salles secrètes (5% de chance) et enfin les salles au trésors (10% de chance).

4ème partie

Le générateur créer une map à partir du MapSprite avec l'aide de MapSpriteSelector qui choisira le bon sprite avec les portes au bon endroit et affichera la couleur en fonction du type de pièce.

5ème partie

Le générateur converti les Roomen RoomInstance et génére physiquement la map à partir des emplacements des différentes pièces dans le tableau en 2 dimensions.

Environnement

Outils utilisés

Afin de développer ce jeu, nous avons utilisé le moteur de jeu Unity (version 2018.1.1f1) sur Windows 10 avec les environnements de développement Visual Studio Community 2017 ou Visual Studio Code. Nous avons versionné notre projet Unity grâce à Git avec Github.

De manière à travailler en groupe de la façon la plus productive possible, nous avons utilisé plusieurs outils pour communiqué et partagé nos avancées. Messenger nous a permis de nous parler en temps réel. Trello nous a permis de définir les taches et de faire pars de nos avancées. Afin de rédiger les documents, nous avons choisis d'utiliser Google Drive. Dans le but de réaliser des réunions avec notre tuteur de projet, nous avons utilisé Skype.