Se connecter

Informatique

Création de Jeux

Sujet : J'aide les gens dans Unity
Scyllis
Niveau 24
04 août 2020 à 00:31:15

Bonsoir, je fais un projet de jeu d'élevage (enfin c’est un prototype, pour l'instant), et ne sachant pas coder je bosse avec Bolt.
(Faites pas attention aux graphismes, pour l'instant j'ai rien du tout ^^')

J'ai créé une base de données des stats de mes créatures :
https://www.noelshack.com/2020-32-2-1596493366-unity-dugtwq3of0.jpg

J'ai bien avancé le système de reproduction, jusqu'à la création du petit. Je créée un nouveau gameobject en utilisant un prefab selon le sexe, le soucis c'est que je ne sais pas comment créer une nouvelle instance de ma base de donnée et l'ajouter au nouveau gameobject (le bébé, donc) :
https://www.noelshack.com/2020-32-2-1596493546-unity-yxprhgnkmc.jpg
Pour l'instant j'ai juste un prefab d'ajouté qui partage une même base de donnée avec sa mère :hap:

J'ai entouré les parties importantes en rouge, dans le flow graph c’est le bazar à cause des tests.

J'ai besoin de créer une nouvelle base de donnée et de l'ajouter dans le champs Stats de mon script Stats Handler, si quelqu'un sait comment faire.

Merci d'avance !

Scyllis
Niveau 24
10 août 2020 à 23:48:07

Personne ?
Je cherche pas une réponse détaillée de comment faire ni qui concerne Bolt, juste en théorie on utilise quoi pour faire ça quand on le fait en C# ?

ThetaTauTau
Niveau 8
11 août 2020 à 13:08:21

En C# pour créer un nouvel objet on utilise la fonction Object.Instantiate qui prend en argument l'objet qu'on veut cloner (prefab ou instance).

Scyllis
Niveau 24
11 août 2020 à 16:17:58

Merci pour ta réponse, mais j'ai dû mal m'exprimer : j'ai déjà réussi à créer le prefab dans la partie, mais j'ai une base de données que j'applique à chaque prefab, et j'ai besoin de créer une nouvelle base de donnée, puis de l'appliquer au nouveau prefab.
En gros c'est pour un jeu d'élevage, là j'ai le petit qui naît avec la base de donnée par défaut du prefab, et j'ai besoin qu'il ait ses stats à lui :/

ThetaTauTau
Niveau 8
12 août 2020 à 08:06:50

"Base de données" ça ne veut pas dire grand chose dans unity (sauf si tu utilise une bdd sql pour stocker tes assets mais ce n'est vraisemblablement pas le cas).
Si la base de donnée dont tu parles c'est ton ScriptableObject, c'est toujours Instanciate pour créer une nouvelle instance.

Scyllis
Niveau 24
12 août 2020 à 22:20:08

Ah yep, c’est un ScriptableObject ! Merci beaucoup !

ThetaTauTau
Niveau 8
25 août 2020 à 14:02:55

On est d'accord qu'Unity n'a pas de système de gestion des événements officiel?

Il y a bien la classe Signal mais ça semble uniquement fonctionner avec Timeline.

Après c'est pas la mer à boire à coder, et il existe des packages sur l'asset store, mais ça me semble étrange que cette fonctionnalité pourtant basique n'existe pas dans Unity (même si ça serrait pas la première fois).

TheRealMarco
Niveau 10
26 août 2020 à 09:15:03

Il existe déjà un système d'événements dans le langage C#.
https://docs.microsoft.com/fr-fr/dotnet/csharp/language-reference/keywords/event

Il existe aussi UnityEvent https://docs.unity3d.com/ScriptReference/Events.UnityEvent.html je connaissais pas et je ne vois pas trop l'intérêt.

ThetaTauTau
Niveau 8
26 août 2020 à 10:07:57

Oui évidement il y a les UnityEvent et les events C#, mais ça c'est les événements eux même, ce que je ne trouve pas c'est un manager officiel.

Un UnityEvent permet de faire facilement communiquer entre eux différents Monobehaviour au sein d'un prefab.
Un manager est nécessaire pour faire communiquer des Monobehaviour de différents prefabs.

Il y a des tutos officiels sur comment gérer les events :
- première méthode avec un singleton : https://learn.unity.com/tutorial/create-a-simple-messaging-system-with-events https://learn.unity.com/tutorial/create-a-simple-messaging-system-with-events
- 2ème méthode avec des scriptableobject : https://unity.com/fr/how-to/architect-game-code-scriptable-objects

Mais aucune implémentation officielle.

Pour l'instant j'utilise une implémentation perso de la 2ème méthode.

shinjo86
Niveau 3
30 août 2020 à 10:31:49

Salut tout le monde, j'ai un problème, je débute sur unity et je souhaiterai modifier un script que j'ai mis à l'adresse suivante :
http://dl.free.fr/o55F3LhIc

En fait je voudrai rajouter une ligne Gamepad dans la liste deroulante "Input Type", je rajoute donc Gamepad dans "Public enum INPUT_TYPE", elle apparait bien dans la liste, ensuite j'ai fait un copier coller d'un "proced virtual void updateinputdirectional" qui correspond à une option proche de ce que je veux obtenir, j'ai donc remodifier en y mettant deux lignes de codes que j'ai créé et qui fonctionne lorsqu'elles sont utilisées seules en script, mais dès que je sélectionne Gamepad dans la liste déroulante, rien ne se passe, je vous mets une capture d'écran pour illustrer :
https://www.noelshack.com/2020-35-7-1598776274-sans-titre.png

Merci d'avance :merci:

ThetaTauTau
Niveau 8
30 août 2020 à 10:43:57

T'as pas mis la bonne valeur dans ton switch case donc ta fonction n'est jamais appellée.

shinjo86
Niveau 3
30 août 2020 à 15:13:18

Bon finalement j'ai réussi en faisant autrement, par contre je voudrais prendre ce composant et le dupliquer pour ensuite le modifier et ainsi attribuer l'un ou l'autre de mes composants au personnage, mais quand je créé un nouveau script et que je fait un copier coller du script du composant que je veux dupliquer, il me met systématiquement une erreur et je n'ai pas les options de cases à cocher, liste déroulante ect....

[Alex_Turner]
Niveau 17
02 septembre 2020 à 17:11:14

Vous avez des bons tutos pour débuter Unity ?
J'ai vu celui d'OpenClassroom mais je sais pas si c'est le bon choix à faire

J'y connais pas grand chose niveau moteur de jeu, faut savoir programmer pour utiliser Unity ou pas du tout ? :(

Niveau développement de jeu sur android, vaut mieux commencer du côté d'Unity ou commencer par du java sans se poser de question ?

Scyllis
Niveau 24
02 septembre 2020 à 18:07:27

Le 02 septembre 2020 à 17:11:14 [Alex_Turner] a écrit :
Vous avez des bons tutos pour débuter Unity ?
J'ai vu celui d'OpenClassroom mais je sais pas si c'est le bon choix à faire

J'y connais pas grand chose niveau moteur de jeu, faut savoir programmer pour utiliser Unity ou pas du tout ? :(

Niveau développement de jeu sur android, vaut mieux commencer du côté d'Unity ou commencer par du java sans se poser de question ?

T'as la chaîne "Tuto unity fr" sur Youtube qui a de très bons trucs, dont un tuto des bases du C#.
La chaîne de Brackeys mais en anglais.
Game Maker's Toolkit (c'est du gamedesign uniquement, rien sur Unity, mais c'est très très utile), en anglais également.
Doc Geraud en fr mais c'est aussi du Game design. Ça reste indispensable selon moi mais ce ne sont pas des tutos Unity, quoi.

Je connaît pas le tuto d'openclassrom, donc je pourrais pas faire de comparatif par contre.

Tu as Bolt que tu peux installer depuis l'asset store sur Unity qui te permet de faire du visual scripting, ça remplace le code par quelque chose de plus visuel.
Après ça reste plus lourd que du code, niveau optimisation c'est pas ouf. Mais si c'est pour un petit jeu ça passera avec quand même.
C'est aussi plus limité, perso c’est ce qui m'a motivé à vraiment me lancer, mais j'ai fini par apprendre les bases du C# et à vraiment me lancer dans le code.
(edit : Ah et pour Bolt, penses pas non plus que tu peux te lancer dedans sans aucune connaissance. C'est plus abordable que le code, mais il te faudra des connaissances de base quand même. Mais t'as des textes d'explication - en anglais - sur chaque input et output qui t'aide à comprendre le fonctionnement).

Pour le développement de jeu sur android, aucune idée.

TheRealMarco
Niveau 10
02 septembre 2020 à 18:49:57

Je vais répondre à la dernière question sur Android.

Unity, c'est clairement pas le plus optimisé pour Android. Mais c'est plus simple et les jeux pourront être portés sur d'autres plateformes en quelques cliques (navigateur, windows, ios, etc...).
Il y a un tuto Unity sur le site de développement d'Android, donc c'est bon signe.
https://developer.android.com/games

Pour info, je crois que genre 50% des jeux sur Android sont développés sur Unity. :ok:

[Alex_Turner]
Niveau 17
02 septembre 2020 à 19:33:12

Merci pour vos réponses :ok:
Je vais aller voir ça

Scyllis
Niveau 24
03 septembre 2020 à 01:14:19

Bon, je coince depuis des plombes, j'arrive pas à trouver :hap:

Je suis encore sur mon proto de jeu d'élevage, et j'ai remplacé Bolt par du C#. je suis en train de faire mon script d'accouplement, et toutes les stats de mes animaux sont gérées par un scriptableobject appelé "AnimalStats" :
https://www.noelshack.com/2020-36-4-1599088639-devenv-4p44alw3gm.png

J'ai un script stats handler sur chaque animal dans lequel je met mon scriptableobject :
https://www.noelshack.com/2020-36-4-1599088650-devenv-dpmxrlfukw.png

Et, donc, le script de reproduction qui me pose problème :
https://www.noelshack.com/2020-36-4-1599088658-devenv-gs2smh89uj.png

Je ne trouve pas comment appeler les parties dont j'ai besoin des scriptablesobjects du mâle et de la femelle, y a toujours un truc qui va pas.

collision.gameObject.GetComponent<AnimalStats>().NOMSTAT semblait marcher pour le mâle, et
this.gameObject.GetComponent<AnimalStats>().NOMSTAT pour la femelle, mais en lançant le jeu, j'ai un message d'erreur : ArgumentException: GetComponent requires that the requested component 'AnimalStats' derives from MonoBehaviour or Component or is an interface.
UnityEngine.GameObject.GetComponent[T] () (at <e8645a79b0794e0e9a2b5bbff081b88a>:0)
FemaleRepro.Update () (at Assets/Scripts/FemaleRepro.cs:39)

Bref, comment faire pour récupérer chaque champs du ScriptableObject de chacun ? :(

Merci d'avance à ceux qui prendront le temps de répondre !

ThetaTauTau
Niveau 8
03 septembre 2020 à 08:08:37

GetComponent permet de trouver les références Monobehaviour du GameObject. Là tu essayes de chercher un ScriptableObject et ça n'a donc pas de sens (les ScriptableObject ne sont pas attachés aux GameObject).

Il faut donc que tu fasse GetComponent<StatHandler>().stats pour obtenir ton ScriptableObject (et passer stats en public).

Au passage GetComponent est une fonction qui est assez lente, il vaut mieux l’appeler une seule fois et mettre le résultat dans une variable si on en a besoin plusieurs fois.

Scyllis
Niveau 24
03 septembre 2020 à 14:09:41

Le 03 septembre 2020 à 08:08:37 ThetaTauTau a écrit :
GetComponent permet de trouver les références Monobehaviour du GameObject. Là tu essayes de chercher un ScriptableObject et ça n'a donc pas de sens (les ScriptableObject ne sont pas attachés aux GameObject).

Il faut donc que tu fasse GetComponent<StatHandler>().stats pour obtenir ton ScriptableObject (et passer stats en public).

Au passage GetComponent est une fonction qui est assez lente, il vaut mieux l’appeler une seule fois et mettre le résultat dans une variable si on en a besoin plusieurs fois.

Merci beaucoup pour la réponse très complète !
J'avais même pas vu que j'avais mis private dans le StatsHandler :hap: ^^'

Scyllis
Niveau 24
16 septembre 2020 à 05:01:26

J'ai encore une question :x

J'essaie de générer une map procédurale pour un petit jeu, et je veux que quand le joueur entre dans une zone définie ça génère la suite.
Pour ça j'ai récupéré la position en Y du gameObject qui a le collider, et je lui demande d'instancier mon prefab avec la position en Y + la distance qui sépare mon collider de la zone où je veux le prefab.

Mais une erreur dans le vector3 de mon instantiate qui me dit "conversion impossible de 'UnityEngine.Vector3' en 'UnityEngine.Transform'.
Sauf que la variable que j'ai mise en Y c'est un float...

https://www.noelshack.com/2020-38-3-1600225265-w211f64nwq.png

Si quelqu'un sait, parce que je trouve plus :/

Sujet : J'aide les gens dans Unity
   Retour haut de page
Consulter la version web de cette page