[WIP] Sheep ( un mouton pas si stupide)

Modérateurs : Administrateurs Suppléants, Community Manager

Répondre
djulio74
Messages : 432
Inscription : 19 Déc 2009 22:55
Contact :

[WIP] Sheep ( un mouton pas si stupide)

Message par djulio74 » 10 Oct 2018 11:40

Salut a tous,
Histoire de m'écarter un peu de mon projet principal ( pour pas en faire une overdose), Je me suis dit que plutôt faire de simple recherche sur unity en général et des test sans réel but, j'allais tenter de faire un mini jeux.

ce serait une espèce de jeux plate forme, réflexion. Je sais pas comment le décrie en fait. lol

Les idées que j'ai en tête :
- vous incarnez un mouton ( bon ok, j'ai déjà perdu la moitié des lecteurs! ::d )
- un mouton ça fonce tête la première, donc pour les déplacement, une fois une direction choisie, on n'as plus qu'à le voir foncer jusqu’à se fracasser contre le premier obstacle venu.

- Justement les obstacles :
-- des fixes : ils vous arrêterons quoi qu'il en coute.
-- des interactifs :
--- => que le joueur devra mettre dans la bonne position avant de se lancer (arrêter ce foutu mouton, ou plutôt le laisser passer par exemple)
--- => écrasez vous contre et ils se déplacerons.
--- => écrasez vous contre et ils se casseront ( en 1, 2, 3 ... x coup)
--- => des portails : tentez de passer au travers, vers l'inconnu..
--- => etc... ( à voir par la suite)

Évidement tout ça serait trop facile si le mouton était invulnérable. il aurait donc un capital de "coup sur la tête", diminuant à chaque choc. Donc vous l'aurez compris, éviter les chocs superflus pour maintenir la bête en vie, choisir le bon chemin.. etc

Coté graphisme, du simple, pas la volonté de faire du super beau. donc principalement à base de cube, et autre formes simple. Donc plutôt orienté GamePlay plutôt que décollement de la rétine. ^^

Voilà, j'ai déjà commencé un peu niveau code, rien de précis a montrer pour l'instant, va falloir patienter

Donc juste pour l'instant si vous avez des avis sur l'idée de départ, si intéressant ou pas, du potentiel, etc... ;-)

______________________________________________________________
\_______________________ Impossible is nothing _______________________/

djulio74
Messages : 432
Inscription : 19 Déc 2009 22:55
Contact :

Re: [WIP] Sheep ( un mouton pas si stupide)

Message par djulio74 » 10 Oct 2018 17:48

Bon j'ai commencé quelques test pour le déplacement du perso et la création de map
Image

lien download=> Download "Seep, un mouton pas si stupide" (MAJ le 11/10/2018)


pour les déplacements, simplement touche directionnelles du clavier, si vous voulez recommencer le niveau, barre espace.
le zone d'extraction est le cube rouge/rose.

le niveau à été vite fait juste pour le test, il y a juste sol et obstacle fixe (mur). et il est généré automatiquement en fonction d'une texture. Du coup super simple de faire un niveau, juste a modifier ou ajouter une texture. ;-) (pour celui là, texture 32 x 32)

Et le tout géré sans aucun Collider. ;)
Dernière édition par djulio74 le 11 Oct 2018 16:56, édité 1 fois.

______________________________________________________________
\_______________________ Impossible is nothing _______________________/

djulio74
Messages : 432
Inscription : 19 Déc 2009 22:55
Contact :

Re: [WIP] Sheep ( un mouton pas si stupide)

Message par djulio74 » 11 Oct 2018 16:56

Bon apparemment la stupidité de ce mouton n’intéresse pas grand monde. :lol: Pas grave je continue quand même.

J'ai fait quelques modifs. Avant la map était composée de cubes que j'instanciais. Un peu trop lisse à mon gout et gourmand (pus de 700 drawall). Certes j'aurais pu faire un combine mesh, mais ça n'aurait pas réglé la platitude du schmilblick. ^^

Donc coup je crée directement les mesh des éléments fixes ( pour l'instant toute la map, sol/mur). Avec des petites bidouilles a ma sauce. Résultat : que deux GameObject pour la map et passé de +700 drawwcall à 18 seulement.

J'ai rajouté aussi 4 niveaux, toujours en parcours simple => trouver le bon chemin. Cela dit le principe est sympa déjà je trouve. ;)
Voila ce que ça donne :
Image Image
et par exemple le "plan" du niveaux correspondant.
le pixel Vert => départ. le bleu => l'arrivé.

Donc taille uniquement de 32 x 32 cases, mais ça marcherait très bien pour 1024x1024.. :hehe: :hehe:

Les niveaux sont juste fonction de la place de la texture dans une liste. donc pas de reload de scène a la fin d'un niveaux. je prend juste le "plan" ( texture) suivant, et je génère a nouveau la map.

Vraiment personne pour me donner son avis? lol
Download "Seep, un mouton pas si stupide"

______________________________________________________________
\_______________________ Impossible is nothing _______________________/

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

Re: [WIP] Sheep ( un mouton pas si stupide)

Message par Alesk » 11 Oct 2018 17:23

djulio74 a écrit :
11 Oct 2018 16:56
Vraiment personne pour me donner son avis? lol
Si, moi :langue2:

Il faudrait une vue un peu plus plongeante et/ou des blocs moins déformés, car au 3eme niveau je n'ai pas vu pendant un bon moment un passage vital qui était masqué par l'accumulation de la perspective et de la déformation d'un bloc.

djulio74
Messages : 432
Inscription : 19 Déc 2009 22:55
Contact :

Re: [WIP] Sheep ( un mouton pas si stupide)

Message par djulio74 » 11 Oct 2018 17:49

haha même en connaissant le niveau, je me suis moi-même aussi fait avoir. Je vois exactement le passage dont tu parle! ;-)
c'est en tout cas noté tes commentaires. je corrige ça de suite. :super:
pas trop galéré sur le dernier niveau? lol

______________________________________________________________
\_______________________ Impossible is nothing _______________________/

EmileF
Messages : 394
Inscription : 18 Mars 2017 19:39

Re: [WIP] Sheep ( un mouton pas si stupide)

Message par EmileF » 11 Oct 2018 18:45

Bravo, je viens de l'essayer, et c'est exactement le genre de jeu que j'aime. Casse tête à souhait.

Je n'ai pas réussit le troisième niveau, mais je n'ai pas pris le temps de bien l'étudier.

Je suis assez d'accord pour une vue un peu plus plongeante.

Et des niveaux un peu plus progressif pour mieux apprendre à l'utiliser, sinon on risque de se lasser trop vite si c'est trop vite trop compliqué. (pff que de trop)

J'aimerai savoir comment tu fais pour te servir d'une texture comme base de donnée, ou puis-je me renseigner pour ça?
Je trouve que c'est une excellente idée. En tout cas, je vais réfléchir à ça. Et pour déformer tes murs? Décidément, j'ai beaucoup de chose à apprendre... De longues heures en perspective :mrgreen:

Super :super:
La différence entre l'intelligence et la stupidité est que l'intelligence est limitée.

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

Re: [WIP] Sheep ( un mouton pas si stupide)

Message par Alesk » 11 Oct 2018 19:56

Pour lire les valeurs des pixels d'une texture : https://docs.unity3d.com/ScriptReferenc ... Pixel.html
Lis le reste de la doc concernant Texture2D, il y a d'autres fonctions bien pratiques autour du même sujet.

djulio74
Messages : 432
Inscription : 19 Déc 2009 22:55
Contact :

Re: [WIP] Sheep ( un mouton pas si stupide)

Message par djulio74 » 11 Oct 2018 20:02

Salut emile121153 ;)

Oui c'est le genre de truc qui peut vite rendre accro, style de jeux sur le tel. ^^
Presque normal pour le troisième niveau, comme l'as dit Alesk, un passage en haut est assez difficile a discerner. C'est corrigé déjà. ( mais pas encore modifié le lien).

Pour le coté progressif oui, là juste fait quelques niveaux pour exemple? voir ce que ça peut donner en simple et compliqué. :hehe:

pour la texture je sais pas si tu trouvera sur la toile, j'ai trouvé tout seul l'idée.. mais ça existe surement deja ;)
En fait :
- je prend la texture. et un array de struc à la longueur du nombre de pixel de la texture (ici 32x32).
- le struc possède (int x, int y, bool obstacle).
- Je lis chaque pixel et en fonction de la couleur j'assigne true/false pour obstacle. x et y les coordonnées du pixel, donc de la case.
- je compte le nombre d'obstacle et les autre (sol).
- pour sol et obstacle je crée un mesh de (20 x nombre obstacle/sol) Vertices car 5 face * 4 vert par zone ( un cube sans la face du dessous.)
- J'assigne la position des vertices en fonction de la position de la zone + un petit random.insiteUnitSphere.

Le plus chiant c'est de retrouver le bon ordre vertice/triangle et les bon uv.

refait le code, juste a l'appliquer sur un cube de base ( ou tout autre objet (avec mesh, meshfilter, renderer). et assigner une texture en noire et rouge en 32 x 32.

Code : Tout sélectionner

using UnityEngine;
using System.Collections;
using System.Collections.Generic;

public class CreateMesh : MonoBehaviour {	
	
	private struct CASE { 
		public int x;
		public int y;
		public bool obstacle;		

        public CASE(int x, int y, bool obstacle) {
 			this.x = x;
			this.y = y;
			this.obstacle = obstacle;
        }		
    }
	
	private CASE[] Cases;	
	public Texture2D levels;

	void Start () {		
		InitialiseMur();	
	}	
	
	void InitialiseMur(){	
		
		// liste pour stocker uniquement les index de mur dans Cases
		List<Vector3> OBS = new List<Vector3>();

		int SizeMap = levels.width;		
		Cases = new CASE[SizeMap*SizeMap];
		
		//pour chaque pixel, j'assigne les données du struct CASE correpondant
		// et recupere les index des obstacle.
		for( int i = 0 ; i < SizeMap ; i++){			
			for ( int j = 0 ; j < SizeMap ; j++){
				int pos = i * SizeMap + j;
				Cases[pos].x = i;
				Cases[pos].y = j;
				Color32 COL = levels.GetPixel(i,j);
				
				// ici je test que le niveau de rouge de la texture, mais peut faire toute les condition possible de toute les couleurs.
				if( COL.r == 255){
					Cases[pos].obstacle = true;
					OBS.Add(new Vector3(Cases[pos].x,0.5f,Cases[pos].y));
				}
			}			
		}
		
		// création nouveau mesh
		Mesh mf = new Mesh();
		Vector3[] Vert = new Vector3[OBS.Count*4*5];
		int[] Tri = new int[OBS.Count*6*5];
		Vector2[] UV = new Vector2[OBS.Count*4*5];
		
		// facteur de déformation des cubes.
		float Rand = 0.13f;
		
		for ( int i = 0 ; i < OBS.Count ; i++){
			
			// pour chaque case OBS ( les cases CASE avec obstacle = true, 
			// j'ajoute 5 * 4 vertices => 4 par face, 5 faces.
			
			// les 4 vertices de la face du haut, la seule que je deforme.
			Vert[i*20+0] = OBS[i] + new Vector3(-0.51f,0,0.51f) + Random.insideUnitSphere*Rand;
			Vert[i*20+1] = OBS[i] + new Vector3(0.51f,0,0.51f) + Random.insideUnitSphere*Rand;
			Vert[i*20+2] = OBS[i] + new Vector3(-0.51f,0,-0.51f) + Random.insideUnitSphere*Rand;
			Vert[i*20+3] = OBS[i] + new Vector3(0.51f,0,-0.51f) + Random.insideUnitSphere*Rand;
			
			// pour les  autre face, je projet juste les vertieces a une certaine hauteur.
			Vert[i*20+4] = Vert[i*20+1];
			Vert[i*20+5] = Vert[i*20+0];
			Vert[i*20+6] = new Vector3(Vert[i*20+1].x ,-0.2f,Vert[i*20+1].z);
			Vert[i*20+7] = new Vector3(Vert[i*20+0].x ,-0.2f,Vert[i*20+0].z);
			
			Vert[i*20+8] = Vert[i*20+3];
			Vert[i*20+9] = Vert[i*20+1];
			Vert[i*20+10] = new Vector3(Vert[i*20+3].x ,-0.2f,Vert[i*20+3].z);
			Vert[i*20+11] = new Vector3(Vert[i*20+1].x ,-0.2f,Vert[i*20+1].z);
			
			Vert[i*20+12] = Vert[i*20+2];
			Vert[i*20+13] = Vert[i*20+3];
			Vert[i*20+14] = new Vector3(Vert[i*20+2].x ,-0.2f,Vert[i*20+2].z);
			Vert[i*20+15] = new Vector3(Vert[i*20+3].x ,-0.2f,Vert[i*20+3].z);
			
			Vert[i*20+16] = Vert[i*20+0];
			Vert[i*20+17] = Vert[i*20+2];
			Vert[i*20+18] = new Vector3(Vert[i*20+0].x ,-0.2f,Vert[i*20+0].z);
			Vert[i*20+19] = new Vector3(Vert[i*20+2].x ,-0.2f,Vert[i*20+2].z);
		
			
			// pour chacune des faces de chaque "cube"
			// defini triangles et UV.
			for ( int i2 = 0 ; i2 < 5 ; i2++){				
				Tri[i*30+i2*6] 	= i*20+0+i2*4;	Tri[i*30+3+i2*6] = i*20+3+i2*4;
				Tri[i*30+1+i2*6] = i*20+1+i2*4;	Tri[i*30+4+i2*6] = i*20+2+i2*4;
				Tri[i*30+2+i2*6] = i*20+2+i2*4;	Tri[i*30+5+i2*6] = i*20+1+i2*4;
				
				UV[i*20+0+i2*4] = new Vector2(0,1);
				UV[i*20+1+i2*4] = new Vector2(1,1);
				UV[i*20+2+i2*4] = new Vector2(0,0);
				UV[i*20+3+i2*4] = new Vector2(1,0);
			}						
		}
		
		// on applique tout au mesh du gameobject
		mf.vertices = Vert;
		mf.triangles = Tri;
		mf.uv = UV;
		mf.RecalculateNormals();			
		gameObject.GetComponent<MeshFilter>().mesh = mf;		

	}
}
Merci du retour en tout cas :super:

______________________________________________________________
\_______________________ Impossible is nothing _______________________/

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

Re: [WIP] Sheep ( un mouton pas si stupide)

Message par Alesk » 11 Oct 2018 20:07

.... et je n'ai pas trouvé la solution du niveau 4 ...

djulio74
Messages : 432
Inscription : 19 Déc 2009 22:55
Contact :

Re: [WIP] Sheep ( un mouton pas si stupide)

Message par djulio74 » 11 Oct 2018 20:16

.... ouais j'ai peut etre attaqué un peu fort dans la monté en difficulté. lol....

Attention Spoiler du numéro 4 :
► Afficher le texte
;-)

______________________________________________________________
\_______________________ Impossible is nothing _______________________/

Répondre

Revenir vers « Vos créations, jeux, démos... »