Logiciel "d'assemblage d'images"

Questions à propos du scripting. Hors Shader, GUI, Audio et Mobile.
shokoBoum
Messages : 6
Inscription : 11 Sep 2019 22:43
Localisation : Bordeaux

Logiciel "d'assemblage d'images"

Message par shokoBoum » 12 Sep 2019 18:42

Bonjour/Bonsoir, à tous et à toutes :) !

Je m'excuse par avance si ma demande ne se trouve pas dans le topic correct, c'est la première sur ce forum et je ne suis pas bien sûr des sujets qu'englobent mes questions/demandes .

Alors voilà : L'année dernière j'ai réalisé un jeu avec une logique assez simple mais sur une techno complètement différente de unity puisque pas du tout adaptée à la conception de jeux.

Le jeu que j'ai réalisé est inspiré de la mécanique du jeu Reign, l'idée est assez simple, une carte avec un texte se présente devant toi et tu a la possibilité de glisser à gauche où à droite, une réponse différente apparait selon le coté choisi et te permet de continuer à avancer dans l'histoire.

Le jeu que j'ai réalisé est en réalité un peu plus complexe que ça du fait de l'ajout d'objets et d'évènements qui viennent ajouter des gameplay différents mais ma question ne porte pas sur cette partie.

Voilà, ayant déjà réalisé le jeu une fois je me suis rendu compte qu'un petit logiciel avec une interface me permettant de créer des cartes m'aiderait grandement à la réalisation du jeu !

Cependant je ne sais pas du comment m'y prendre. La première fois, pour créer une carte, je superposais des images
ex: une image de montagne en fond + une image d'un personnage par dessus + une image d'un objet (comme si le personnage le tenait dans la main). J'aimerais reprendre ce système qui me permettait d'utiliser les images pour des combinaisons différentes (l'image de la montagne avec différents personnages).

L'idée du logiciel serait assez simple, il faudrait qu'il puisse importer plusieurs images, choisir "order in layer" de ces images, les redimensionner et que tout ça soit dans un genre de "cadre" pour avoir toujours le même format de carte à la fin ( avec un mask ? )

Je pars presque de zéro alors voici les questions sur lesquelles j'aurais besoin de vos conseils :

- Quelle est la meilleure façon de faire une superposition d'images dans unity ?
- Quelle est la meilleure façon de faire un genre de "cadre" pour un format standard ?
- Pour vous, est-il faisable de faire ce petit logiciel directement dans unity ?
- Si non, comment me conseillez vous de réaliser ce petit logiciel ?

Merci d'avance pour votre aide, je n'ai peut-être pas été clair ou complet dans mes explications n'hésitez pas à me demander des précisions !

Avatar de l’utilisateur
Chandala
Messages : 30
Inscription : 07 Août 2019 15:42

Re: Logiciel "d'assemblage d'images"

Message par Chandala » 12 Sep 2019 20:14

Coucou ! :cote:

Dans les faits ça semble possible et même nécessaire selon les effets que tu veux rendre avec tes images (sait-on jamais mais par exemple si tu voulais créer un effet de brume entre le décor et le personnage de ta carte, il serait donc nécessaire de superposer les différents éléments de ta carte pour inclure de la brume entre les deux). Quel genre de rendu voudrais-tu faire précisément ?

Concernant la pratique, un Canvas avec un (ou plusieurs) Panel à l'intérieur me semble être le plus adéquat.
Cela pourrait donner quelque chose de cet ordre-là :
Image
(C'est ce que j'ai du côté de ma Visual Novel, bon ce n'est pas le même genre de jeu mais comme c'est une succession de calques également ::d )

Autrement je ne peux que te conseiller des tutoriels, notamment celui-ci qui pourrait te donner une bonne idée du procédé :
https://www.youtube.com/watch?v=YLHqKj9FvBs
Les ressources utilisées sont dans la description de la vidéo ;)
- Ce qu'un réverbère pense des chiens.

shokoBoum
Messages : 6
Inscription : 11 Sep 2019 22:43
Localisation : Bordeaux

Re: Logiciel "d'assemblage d'images"

Message par shokoBoum » 12 Sep 2019 21:14

Super ! merci pour la piste :) ! Je vais commencer par essayer tout ça ^_^ !

Voici une idée du rendus que je veux :
Image

Là il y a trois images superposés, la mer, puis le bateau par dessus et enfin le capitaine par dessus )
En faite pour avoir une idée réel si vous voulez le jeu est sur le Google play ;) vous pouvez l'installer ici :-D
( Si il vous prend l'idée d'y jouer le jeu était a la base un cadeau a une personne précise, c'est pour ça que certaines choses peuvent ne pas être claire ou étrange au première abord 😁 )

shokoBoum
Messages : 6
Inscription : 11 Sep 2019 22:43
Localisation : Bordeaux

Re: Logiciel "d'assemblage d'images"

Message par shokoBoum » 20 Sep 2019 13:20

Bonjour c'est de nouveau moi :-D !

J'ai, je pense, trouver les solutions à la plus pars des questions que je me posais jusque là, ( d'ailleurs je vous posterais surement un avancement du projet pour avoir vos avis et retour d'ici quelque temps ) mais voilà, je ne sais pas si c'est unity en lui même ou le c# mais quelque chose me perturbe concernant le stockages des cartes que je créé ! Le jeu en sera composé de centaines ! ( Même de milliers si je suis motivé ::d ) avec potentiellement des visuels différents pour chacune de ces cartes ( Infos: un visuel de carte est composé d'une superposition de sprites ) sauf que voilà, je n'ai pas envie que mes 500 cartes soient toutes présentes dans la scène en même temps ! ça n'aurais pas d'intéret et surtout cela, je pense, impacterait les performances !

Sauf que voilà, je ne trouve pas de solution pour stocker mes superpositions de sprites (sachant aussi que je peu utiliser un meme sprite de différente "facon" sur deux cartes différentes, en changeant par exemple ça taille, (imaginons une montagne en decors de fond et de laquelle on se rapprocherait )).

Alors voilà j'aurais besoin de vos conseils !

Et si possible, si quelques avec une bonne connaissance de unity serait disponible pour échanger 10/15 mins en messages privé pour des questions "architectural" d'un projet sur unity cela m'aiderais grandement !

merci d'avance ;-) !

Avatar de l’utilisateur
Alesk
Messages : 2303
Inscription : 13 Mars 2012 09:09
Localisation : Bordeaux - France
Contact :

Re: Logiciel "d'assemblage d'images"

Message par Alesk » 20 Sep 2019 14:58

Le plus économique au niveau des ressources serait de stocker des images dans un dossier "Resources"

https://docs.unity3d.com/Manual/BestPra ... nity6.html
https://docs.unity3d.com/ScriptReference/Resources.html
https://docs.unity3d.com/Manual/Loading ... ntime.html

Comme ça tu pourrais ne charger tes images que lorsque tu en as besoin, et les virer de la mémoire dès qu'elles sont inutiles.

Ensuite, pour définir tes assemblages, tu pourrais gérer tout ça par script, en sauvant les données de chaque assemblage sous la forme d'un fichier texte (formaté comme ça t'arrange), et générer ensuite les assemblage à la volée à partir de ces infos.

Avatar de l’utilisateur
Max
Messages : 8763
Inscription : 30 Juil 2011 13:57
Contact :

Re: Logiciel "d'assemblage d'images"

Message par Max » 20 Sep 2019 18:51

Bonsoir,
shokoBoum a écrit :
20 Sep 2019 13:20
Sauf que voilà, je ne trouve pas de solution pour stocker mes superpositions de sprites (sachant aussi que je peu utiliser un meme sprite de différente "facon" sur deux cartes différentes, en changeant par exemple ça taille, (imaginons une montagne en decors de fond et de laquelle on se rapprocherait )).
En complément, pense aussi à regarder du coté des prefabs, cela devrait t'être utile ;)
Image
Pas d'aide par MP, le forum est là pour ça.
En cas de doute sur les bonnes pratiques à adopter sur le forum, consulter la Charte et sa FAQ

shokoBoum
Messages : 6
Inscription : 11 Sep 2019 22:43
Localisation : Bordeaux

Re: Logiciel "d'assemblage d'images"

Message par shokoBoum » 21 Sep 2019 01:36

Merci pour vos réponses, je commence a me faire une idée de la façon dont je vais faire :) !

Je vous l'expose, voir si je pars dans la bonne direction :-D :

Petit récap de ce que je veux que le jeu fasse, une card avec un text apparait => je choisi de swiper a gauche ou a droite avec donc une action différente de chaque coté, => selon si j'ai swiper a gauche ou a droite j'arrive sur une card différente et ainsi de suite ...

Lorsque j'ai réalisé ce jeu en javaScript j'ai stocké les datas des cards de cette façon, avec un object contenant des objects :

Code : Tout sélectionner

cardList : {
    card_0 : {
        nextRightCard: "card_1";
        nextLeftCard: "card_2";
        otherData: "ploupPloup";
    },
    card_1 : {
        nextRightCard: "card_3";
        nextLeftCard: "card_4;
        otherData: "chaton";
    }
    card_2 : {
        nextRightCard: "card_5";
        nextLeftCard: "card_6";
        otherData: "CpasFaux";
    }
}
L'idée étant assez simple, en partant de la card_0 je swipe à droite, je vois que le nom de la prochaine card est card_1
je vais donc chercher et afficher les datas de cardList.card_1,
ensuite je swipe à gauche, je vais donc aller chercher les datas de cardList.card_4 et ainsi de suite ...

L'équivalent qui me parrais bien en C# est l'utilisation de Dictionary qui fonctionne de façon très similaire a ce que je viens de vous décrire. Pensez vous que c'est une bonne solution ? Le problème est la facon un peu trivial de créer ce Dictionary qui est obligé d'être généré au démarrage du jeu a partir d'une List ou d'un Array de mes cards, si je ne me trompe pas ? ( car je ne vois pas de façon de gérer mon Dictionary autre que par le script, car malheureusement unity n'affiche pas les Dictionary comme les lists ou les arrays ce qui m'aurais permis de cliquer glisser mes cards directement dedans )


Je voyais la chose comme cela :

Code : Tout sélectionner

	[Serializable]
	public struct Card
	{
		public string nameCard;
    		public string nextRightCard;
   		public string nextLeftCard;
    		public Transform positionOfMyFrontSprite;
    		public string frontSpritePath;
    		public Transform positionOfMyBackSprite;
    		public string backSpritePath;
    		public OtherDataType otherData;
	}
Puis créer un empty Object dans ma scene (deckCard par exemple ? ) et générer mon Dictionary a partir de ma List ou Array :

Code : Tout sélectionner

	
	public List<Card> cardList;
	private Dictionary<string, Card> cardDictionary;

	void Start()
    {
	cardList.ForEach(card => cardDictionary.Add(card.nameCard, card));
    }

Et donc pour retrouver la card dont j'ai besoin

Code : Tout sélectionner

	cardDictionary.TryGetValue("card_0", out card);
Je fini par réassembler ça en GameObject et à l'afficher :

Code : Tout sélectionner

	cardDictionary.TryGetValue("card_0", out cardDatas);
	var cardToDisplay = Resources.Load("prefabs/cardTemplate", GameObject) as GameObject;
	var frontSprite = Resources.Load(cardDatas.frontSpritePath, Sprite) as Sprite;
	cardToDisplay.FindGameObjectsWithTag("frontSprite").sprite = frontSprite;
	cardToDisplay.FindGameObjectsWithTag("frontSprite").transform = cardDatas.positionOfMyFrontSprite;
	Instantiate(cardToDisplay, new Vector3(0, 0, 0), Quaternion.identity);
Bon j'avoue que je ne suis pas sur de mon code je l'ai écrit a la volé histoire de vous expliquer mes propos et c'est très fortement possible qu'il ne fonctionne pas, mais j'aimerais avoir vos avis sur cette façon de faire, vous parait elle bien ? Y a t'il plus simple ? Et si oui comment :gene: ?!
Qu'elle sont la amélioration possible ?
Est-ce une façon assez optimisé ?

Encore une fois merci d'avance :p

Avatar de l’utilisateur
Alesk
Messages : 2303
Inscription : 13 Mars 2012 09:09
Localisation : Bordeaux - France
Contact :

Re: Logiciel "d'assemblage d'images"

Message par Alesk » 21 Sep 2019 08:44

Salut,

Si tes noms de cartes ne sont jamais affichés et sont juste des suites numérotées, tu peux te passer de ce nommage et simplement utiliser les nombres pour les indexer... et dans ce cas plus besoin d'un Dictionnary, une List ou un Array feront l'affaire.
Ton fichier deviendrait :

Code : Tout sélectionner

cardList : {
    0 : {
        nextRightCard: 1;
        nextLeftCard: 2;
        otherData: "ploupPloup";
    },
    1 : {
        nextRightCard: 3;
        nextLeftCard: 4;
        otherData: "chaton";
    }
    2 : {
        nextRightCard: 5;
        nextLeftCard: 6;
        otherData: "CpasFaux";
    }
    }
}
Ou alors tu peux le garder tel qu'il est actuellement et extraire les nombres des noms déjà définis, à la volée lors de l'import.

Pour le reste, ça me semble ok.

Jette aussi un oeil du côté des "Scriptable Objects", c'est le genre de structure qui pourrait t'être utile.
https://docs.unity3d.com/Manual/class-S ... bject.html

Et une vidéo d'exemple pile dans ton sujet :
https://www.youtube.com/watch?v=aPXvoWVabPY

Répondre

Revenir vers « Scripting »