J'ai entendu parler de la conception axée sur les données et j'effectue des recherches à ce sujet depuis un certain temps. J'ai donc lu plusieurs articles pour comprendre les concepts.
L'un des articles est Data Driven Design écrit par Kyle Wilson. Comme il l'a décrit, il me semble que le code d'application (c'est-à-dire le code de contrôle des ressources telles que la mémoire, le réseau ...) et le code logique de jeu doivent être séparés, et le code logique de jeu doit être piloté par des sources de données externes. À ce stade, je peux imaginer que le développeur écrirait une sorte d'éditeur de jeu qui accepte des données externes sur les objets du jeu (telles que les informations sur les personnages, les informations sur les armes, les informations sur les cartes ...). La conception du scénario sera scriptée par un langage / outil personnalisé écrit par le programmeur pour permettre au concepteur de jeu de créer une interaction entre les objets du jeu. Le concepteur du jeu utilisera soit un langage de script existant / personnalisé pour écrire le script du jeu, soit un outil glisser-déposer pour créer le monde du jeu. Un exemple d'approche d'outils auquel je peux penser est World Editor, qui est généralement fourni avec les jeux de Bliizard.
Cependant, un autre article est contre l'utilisation de Data Driven Design, The Case Against Data Driven Design . L'auteur suggère de ne pas laisser la conception du jeu axée sur les données, car cela prendrait plus de temps pour développer un jeu, car le concepteur de jeu a le fardeau de la programmation. Au lieu de cela, il y aura un programmeur de jeu pour programmer le jeu librement à partir de la conception de l'esquisse et sera vérifié par le concepteur du jeu une fois la programmation du jeu terminée. Il appelle cela un programme. Ce que je pense de cette méthode est similaire à la façon dont je le faisais auparavant: la logique du jeu est l'application elle-même, comme apposée sur l'idée ci-dessus, l'application est l'éditeur de jeu et le jeu réel est conçu en fonction de l'outil.
Pour moi, la première méthode semble plus raisonnable, car les composants du jeu peuvent être réutilisés pour de nombreux projets. Avec la deuxième méthode qui s'oppose à la conception basée sur les données, le code du jeu n'appartient qu'à ce jeu. C'est pourquoi je pense que Warcraft a tellement de genres de jeux, comme le Warcraft original et diverses cartes personnalisées, et l'un des plus célèbres: DOTA qui définit en fait un nouveau genre. Pour cette raison, j'ai entendu des gens appeler World Editor est le moteur de jeu. Est-ce vrai à quoi devrait ressembler un moteur de jeu?
Donc, après tout cela, je veux juste vérifier s'il y a un défaut dans ma compréhension de ces idées (piloté par les données, le programmeur, les scripts, etc.)?
la source
Réponses:
Faire en sorte que votre jeu (ou tout produit logiciel) soit piloté par les données est presque toujours un avantage. Le seul véritable inconvénient est que vous pouvez passer un peu plus de temps à construire les systèmes concernés à l'avance; cela sera payant pour le reste de votre carrière de programmeur (même si vous ne réutilisez pas ces mêmes systèmes pendant tout ce temps, vous réutiliserez les techniques que vous avez utilisées pour les construire).
Le défi, et où la déconnexion dans ces deux articles que vous avez liés entre en jeu, est ce que vous choisissez de mettre dans les données et qui vous choisissez de donner accès à ces données. Fondamentalement, la conception et le développement basés sur les données signifient simplement que vous placez des informations dans un stockage externe, chargez ces informations au moment de l'exécution et agissez en conséquence. Votre code d'application fait ce que les données externes lui indiquent, plutôt que d'écrire du code d'application qui fait directement ce que vous pensez que le résultat final devrait être. Ce n'est pas une idée complexe.
Vous n'avez pas besoin de construire des "architectures pilotées par composants" complexes (comme c'est la mode de nos jours). Mettre des constantes pour peaufiner la physique (force gravitationnelle, coefficients de restitution) dans un fichier texte est piloté par les données. Les scripts (en Lua ou autre) sont pilotés par les données. Décrire vos données de niveau en XML. Quelque chose comme ça.
Vous pouvez piloter à peu près n'importe quel composant de logiciel avec des données, et vous pouvez choisir ceux avec lesquels vous voulez le faire. Le temps de développement est cher; le temps du programmeur en particulier. Si vous pouvez gagner du temps, vous ou d'autres programmeurs, en mettant le comportement et les données dans un stockage externe et en n'exigeant pas que le jeu soit recompilé pour chaque petit changement, vous devriez. Vous économiserez de l'argent et accélérerez les choses.
De plus, vous courez un risque énorme en essayant de faire en sorte que les «concepteurs conçoivent» et en faisant en sorte que les programmeurs «concrétisent ces conceptions», forçant un programmeur à exister dans la boucle d'itération pour le travail d'un concepteur: vous courez le risque de donner au programmeur l'impression il est juste un singe de code, faisant constamment de petits ajustements triviaux pour la conception. Cela peut être extrêmement démoralisant pour une grande majorité de programmeurs, qui souhaitent travailler sur des défis techniques intéressants et non sur le rôle de proxy d'un concepteur.
Pour vos questions spécifiques:
Un "moteur de jeu" n'a pas vraiment de définition fixe. Généralement, c'est la collection unifiée de technologie sous-jacente utilisée pour créer un jeu, généralement prise en charge par un tas d'outils connexes (et donc très axée sur les données). Mais cela varie assez largement d'un contexte à l'autre.
Vous semblez être plus ou moins sur la bonne voie, bien que vous compliquiez peut-être trop la conception et le développement basés sur les données en les associant à des systèmes basés sur des composants.
la source
En tant qu'auteur du deuxième article, je voudrais clarifier quelques points.
En fin de compte, il n'y a pas de bonne ou de mauvaise réponse. Il s'agit de savoir comment vous et vos collègues êtes à l'aise de travailler. Quand j'ai écrit ce blog il y a quelque temps, il y avait beaucoup de discussions sur la façon dont tout le travail devrait être poussé vers les concepteurs, et je voulais écrire sur le nombre de sociétés de jeux à succès que je connaissais ont trouvé un équilibre différent.
En outre, comme note latérale, mon entrée de blog a 5 ans. Il semble que beaucoup plus de studios se tournent vers les langages de script et ainsi de suite ces jours-ci, mais créent des outils matures pour les déboguer, ce qui était ma principale plainte. Quand j'ai écrit cela, je ne pense pas qu'Unreal Kismet existait, que je n'ai pas utilisé, mais il semble qu'ils essaient de simplifier les scripts et il a apparemment un débogueur. (Je ne sais pas si cela fonctionne bien)
Pour les jeux à plus petite échelle, je ne pense vraiment pas que vous souhaitiez essayer de déployer un langage de script ou des fonctionnalités similaires dans votre technologie, mais si vous avez une équipe énorme et beaucoup de temps à consacrer à la technologie, il est possible de le faire à droite et l'investissement en temps peut avoir du sens selon la façon dont votre équipe de développement aime travailler. Personnellement, je vais probablement m'accrocher au C ++ aussi longtemps que possible car pour moi, c'est le plus simple et le plus rapide car je dois souvent essayer de contourner les "fonctionnalités" comme le ramasse-miettes.
la source
Vous devriez regarder le moteur technologique BitSquid . Il est construit à l'aide de concepts DOD. Le blog de Niklas Frykholm est très intéressant. Il existe de nombreux articles sur la conception de ce moteur.
Au GDC 2011, Niklas a fait une présentation sur le rendu basé sur les données .
la source