Nebulus, WIP ma formation à Unity 3D.

Avatar de l’utilisateur
baobab65
Messages : 7
Inscription : 12 Juil 2010 12:10

Nebulus, WIP ma formation à Unity 3D.

Message par baobab65 » 01 Nov 2010 16:26

Bonjour à tous,
je vous présente le prototype d'un petit jeu des années Amiga. J'essaie de réaliser ce jeu dans le cadre de mon apprentissage à Unity, sachant que je ne suis pas développeur mais Graphiste.

Pour les nostalgiques des jeux 8 bits je me suis attelé au remake de NEBULUS :

http://en.wikipedia.org/wiki/Nebulus_%28video_game%29

Image

J'en suis qu'au début, mais après 3 jours de tests, de galères et de visualisation de tutoriaux, voici ou j'en suis ; Au début :

http://www.nowooo.com/DEMO/Jeu.html

J'attends vos encouragements, je continue ma formation Unity sur ce petit Jeu en WIP. Je ferai part de mon avancement ou de mes galères !

Olivier.
J'en profites pour passer le bonjour à giyomuSan

Avatar de l’utilisateur
baobab65
Messages : 7
Inscription : 12 Juil 2010 12:10

Re: Nebulus, WIP ma formation à Unity 3D.

Message par baobab65 » 01 Nov 2010 19:14

Petit Up de mon prototype Nebulus,

j'ai un peu modifié le jeu, et notamment la téléportation !

Image

Par contre j'ai un souci avec l'affichage de mon score. Lorsque je récuprère un item Bonus (petits cubes violets), j'ajoute +50 avec une variable, mais je n'arrive pas à l'affiche dans mon GUItext. Quelqu'un a une idée. :D

Voici le code placé sur l'item cube :

Code : Tout sélectionner

var MonPlayer : Transform;
var prefabExplosion: GameObject;
var MonScore : GUIText;
var MonSon : AudioClip;
var score = 0;
var points = 20;

function Update () {	
	MonScore.text = "Score : " + score;	
	/////// ROTAION AUTOMATIQUE DE L'ITEM ///////////
	transform.Rotate(10*Time.deltaTime, 10*Time.deltaTime, 0);
}


function OnTriggerEnter (MonPlayer : Collider) {	
	if (MonPlayer)
	{					    		
    	////// SCORE ///////
		score += points;	
		Explosion();
	}
}

function Explosion(){
    //yield WaitForSeconds(2);
    Instantiate(prefabExplosion,transform.position,transform.rotation);
    Destroy(gameObject);   
    // Lecture d'un SON
    audio.PlayOneShot(MonSon);
    }
Olivier.

Avatar de l’utilisateur
krys64
Fondateur unity3d-france
Fondateur unity3d-france
Messages : 471
Inscription : 26 Nov 2009 00:08

Re: Nebulus, WIP ma formation à Unity 3D.

Message par krys64 » 01 Nov 2010 21:55

Je suppose que ce script est attaché à plusieurs objets ? Si oui, il vaut mieux gerer le score à un seul endroit. En général je gère le score sur l'objet caméra et le onEnterTrigger de ton objet ne devrait que lancer une fonction score dans l objet camera.
Le problème est qu'ici tous les objets qui ont ton script attaché réinitialisent en boucle le score à 0. Il faut que score soit une variable unique.

Avatar de l’utilisateur
baobab65
Messages : 7
Inscription : 12 Juil 2010 12:10

Re: Nebulus, WIP ma formation à Unity 3D.

Message par baobab65 » 02 Nov 2010 09:39

Merci Krys, pour cette réponse, je vais tester dans la semaine, je vous tiens au courant.

Olivier.

Avatar de l’utilisateur
giyomuSan
Messages : 1799
Inscription : 09 Déc 2009 14:52
Localisation : Japon

Re: Nebulus, WIP ma formation à Unity 3D.

Message par giyomuSan » 02 Nov 2010 13:30

haha je me disais bien que il m'etait pas inconnu ce mouton XD

comem te l as dit krys , utilise une static pour ton score, qeu tu peu mettre ds un script pour ca que tu fou sur el GUI qui gere l'affichage du score

Y a plusieurs solution, perso , sur un jeu qui t'est familier ;)...j envoi le score ds une fonction qui se trouve sur mon GUI , en C# j utilise un singleton pour ca

mais en gros tu as ta classe Affichage et dedans un fonction "public void DisplayScore(int pts)"

poru chaque truc qui trigge et envoie du score tu accede a ta fct via ta classe ds mon cas ca ferait

Affichage.instance.DisplayScore(30) par example ( le coup de l instance c en rapport avec le Singleton mais bon oubli c plus le principe )

et ds ta fonction bah tu ajoute a ta variable score += pts;

ensuite y a plus qu a afficher tout ca.

en gros pour ce genre de truc qui sont unique utilise des variable static et group tout ca au meme endroit.

Parcontre Attention , une static ne sera pas remise a Zero meme si tu quitte ta scene de jeu, la variable static se fou de savoir ds quel scene tu est , c pour toute la duree du jeu

Donc en debut de partie dans une fonction Start() score = 0; sinon ca va et jouer des tour ^^

bon courage !

troopa
Messages : 20
Inscription : 10 Juin 2010 12:08

Re: Nebulus, WIP ma formation à Unity 3D.

Message par troopa » 04 Nov 2010 10:50

Salut, quel bon jeu c'était Nebulus ! Un jeu est récemment sorti sur Iphone avec un chevalier qui doit escalader une tour pour sauver des princesses, avec un style cartoon, et avec exactement le même principe. marrant que le principe Nebulus revienne en force...
Bon courage à toi pour la suite, le début est déjà bien réussi ;)

Avatar de l’utilisateur
baobab65
Messages : 7
Inscription : 12 Juil 2010 12:10

Re: Nebulus, WIP ma formation à Unity 3D.

Message par baobab65 » 14 Nov 2010 00:41

Salut à tous, j'ai repris la prog de mon jeu après quelques jours d'absence.

Je suis bloqué au niveau des Téléportations (blocs de feu). Je voudrais récupérer le gameObject.name de la 1ère porte de téléportation lors de la collision de mon Player avec cette porte (OnTriggerEnter) dans une autre fonction qui gère la téléportation. J'ai crée un variable LaPorte dans OnTriggerEnter et je voudrais la récupérer dans mon autre fonction Teleportation();. Je ne sais pas si c'est très clair ?

J'ai commenté dans la fonction Teleportation Debug.Log(LaPorte), car Unity ne reconnais pas cette variable....

Voici le code :

Code : Tout sélectionner

////////////////////////////////////
	////////////////////////////////////
	/// Collision Portes
	////////////////////////////////////
	////////////////////////////////////

function OnTriggerEnter (other : Collider) {
	
	var LaPorte = other.gameObject.name;

	if (other.gameObject.name == "Porte1" )
		{	
		MaCollision = true;
		}
		else
		 	{
			MaCollision = false;
			}
}



	////////////////////////////////////
	////////////////////////////////////
	/// Téléportation
	////////////////////////////////////
	////////////////////////////////////

function Teleportation () {
	//Debug.Log(LaPorte);
	
	var NouvellePorte = GameObject.Find("Porte2");
	MaTour.transform.eulerAngles = NouvellePorte.transform.eulerAngles;
	movement.verticalSpeed = 0.0;
	movement.speed = 0.0;

	// Explosition
	Instantiate(PlayerExplosion,transform.position,transform.rotation);
	
	transform.position = NouvellePorte.transform.position;
	// Initialise la rotation du Player
	transform.eulerAngles = Vector3(0, 270, 0);
	// Teleportation terminée, je remet à False
	MaTeleportation = false;	

}
Olivier.

Avatar de l’utilisateur
giyomuSan
Messages : 1799
Inscription : 09 Déc 2009 14:52
Localisation : Japon

Re: Nebulus, WIP ma formation à Unity 3D.

Message par giyomuSan » 14 Nov 2010 11:55

ta varaible LaPorte n'existe plus ds ta fct de teleport , elle n'existe qeu lorsque al fct OnTrigger est activee... a moisn que une partie du code sois manquante ...

plutot que de recuperer le nom de ton objet pk ne pas utiliser les tag, c'est generalement prevu pour ca

if( obj.tag == "MonTag")
//Code

evite aussi les command de GameObject.Find quant tu repete souvent ca ds ton code , c lourd , creer toi plutot un Array et initailise le avec tes porte ds le niveau au depart et tu peu juste incrementer un index style

nouvellePorteIndex += 1;
nouvellePorte = nouvellePorteArray[nouvellePorteIndex];

toute les operation GetComponent, find etc ...c souvent source a plomber ton fps si tu t en sert bcp trop souvent en cours de jeu donc au possible , pour eviter les ennuis vaut mieux cacher ca quelques part au depart ds une fct Start ou Awake.

derniere chose , le else ds la fct trigger il est pas forcement utile , la logique du trigger ce que si il opere tu veux un resultat , ds ton cas ton teleport, donc je serais toi j irais directement a ma fct teleport du trigger

if(obj.tag == "MonTag")
Teleportation();

et tu reset ce que tu as besoin de la ensuite

Avatar de l’utilisateur
baobab65
Messages : 7
Inscription : 12 Juil 2010 12:10

Re: Nebulus, WIP ma formation à Unity 3D.

Message par baobab65 » 14 Nov 2010 12:19

Merci, maître Giyomusan.

Je teste et je tiens au courant.

Avatar de l’utilisateur
baobab65
Messages : 7
Inscription : 12 Juil 2010 12:10

Re: Nebulus, WIP ma formation à Unity 3D.

Message par baobab65 » 14 Nov 2010 12:54

Ok les pour GameObject.Find, je vais utiliser des Tag.
Ok pour les Array, c'est ce que je comptais faire.
Pour les variables Booléennes cela permet de detecter la collision avec la (es) porte(s) mais aussi de vérifier que le joueur à cliqué sur la touche UP pour activer la téléportation. D'ou mes 2 variables MaCollision et MaTeleportation.

Par contre je n'arrive toujours pas à récupérer le nom de ma porte, ici "Porte1" dans ma fonction Teleportation();
Quelle est la solution ?

Voici mon nouveau code :

Code : Tout sélectionner

	/// Collision Portes

function OnTriggerEnter (other : Collider) {
		if (other.tag == "Porte1" )
		{	
		MaCollision = true;
		}
}
	/// Téléportation

function Teleportation () {
//// COMMENT JE PEUX RECUPERER LE NOM DE MA PORTE EN COLLISION ????? MaPorte
	// Initialise la rotation de la tour
	MaTour.transform.eulerAngles = Vector3(0, 190, 0);
	// Explosition
	Instantiate(PlayerExplosion,transform.position,transform.rotation);
	// Definit la position de teleportation
nouvellePorteIndex += 1;
NouvellePorte = nouvellePorteArray[nouvellePorteIndex];
	transform.position = NouvellePorte.transform.position;
	// Initialise la rotation du Player
	transform.eulerAngles = Vector3(0, 270, 0);
	// Teleportation terminée, je remet à False
	MaTeleportation = false;	
	MaCollision = false;

}
Merci.

Olivier

Répondre

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