Des portes (encore...)

Questions techniques liées à l’utilisation d'Unity (et n'entrant pas dans le cadre d'une des sections suivantes)
Avatar de l’utilisateur
Lutin
Messages : 2
Inscription : 26 Mai 2010 17:42

Des portes (encore...)

Message par Lutin » 28 Mai 2010 13:35

Salut !
Je débute également avec Unity et la programmation.

Je vais être long mais je vais essayer de vous exposer mes problème avec le plus de précision possible:

Je cherche d'abord à faire un couloir. Il contient logiquement deux portes à chacune de ces extrémités. Ces deux portes sont pour le moment des simples blocs situés à l'extérieur du couloir, et qui doivent coulisser horizontalement pour en boucher les extrémités.
Normalement, ces deux portes doivent se fermer ou s'ouvrir (selon leur état : j'ai compris qu'il fallait se servir d'un toggle, mais je ne sais pas concrètement ou placer quoi dans le code pour obtenir cet effet) à chaque fois que le character controller passe dans l'une des zones situées à l'intérieur du couloir, respectivement juste après son entré et juste avant sa sortie)
J'ai passé du temps sur les tutoriaux d'Unity et regardé quelques vidéos de Krys mais je n'arrive pas à trouver les bons éléments de code et à stucturer celui-ci comme il le faut. Dans la vidéo 6, j'ai par exemple bien compris qu'il me faudrait faire quelque chose de similaire, j'ai placé les objets vides à l'entrée et à la sortie du couloir, je leur ai lié un script... Mais je ne sais pas quoi écrire dedans. Je ne sais pas ou placer les mots-clés (comme translate, qui semble correspondre), après quel autre, dans quel ordre, etc...

Je dois par ailleurs, dans ce même couloir, placer des fichiers sons que l'on doit pouvoir lancer en cliquant sur un bloc in-game.

Pourriez-vous me donner le code nécessaire à ces évènement ? Les tutoriaux et la banque de mots clés d'Unity me donnent des éléments de réponse mais vraiment, ne me permettent pas de réussir à faire ce que je veux.

Avatar de l’utilisateur
Rémi
Messages : 57
Inscription : 26 Avr 2010 12:55

Re: Des portes (encore...)

Message par Rémi » 28 Mai 2010 16:43

Il te faut utiliser un systême de Trigger (et non toggle ;) ).

La démarche est simple :
- ajoute un empty GameObject à ta scène.
- Ajoute lui un rigidbody et une Box Collider
- Décoche Use Gravity et coche Is Kinematic sur le rigidbody.
- Coche is Trigger sur ton Box Collider et redimensionne là selon tes besoins.

Ensuite ajoute le script C# suivant à ton empty GameObject :

Code : Tout sélectionner

using UnityEngine;
using System.Collections;

public class OuvrirPorte: MonoBehaviour {

	public GameObject porte;
	
	void OnTriggerEnter(Collider other)
	{
		if(other.tag=="player")
		{
			porte.transform.Translate(new Vector3(1,0,0)); // tu peux changer les valeurs!
		}
	}
	
}
Il faut que tu tag ton joueur avec "player" et que celui ci est un rigidbody.

N'oublie pas d'assigner ta variable 'porte' dans l'inspector via un drag'n drop depuis la scène ou la hierarchy!

Quand tu passer dans le BoxCollider de ton gameObject avec ton joueur, la porte s'ouvrira!

J'ai écrit ca vite fait donc si tu as des questions n'hésite pas!
Dernière édition par Rémi le 28 Mai 2010 16:53, édité 2 fois.

Avatar de l’utilisateur
Rémi
Messages : 57
Inscription : 26 Avr 2010 12:55

Re: Des portes (encore...)

Message par Rémi » 28 Mai 2010 16:49

J'avais pas vu la fin de ton texte!

Pour les cubes qui émettent du son c'est simplissime :

Tu ajoutes une AudioSource à ton cube et tu rajoute le script C# suivant à ton cube :

Code : Tout sélectionner

using UnityEngine;
using System.Collections;

public class CollectItem : MonoBehaviour {

	public AudioClip son;
	
	void OnMouseDown()
	{
	          audio.PlayOneShot(son);
	}
	
}
Il te suffit de faire glisser le son voulu dans la variable 'son' de l'inspector et le tour est joué! :D

PS: après avoir lu ton message, il me semble quand même que tu n'as pas les bases pour écrire un script! Unity facilite extrèmement le dev d'un jeu mais quelques notions de bases en prog sont utiles. Avant de commencer à faire des jeux, je te conseille de chercher des tutos pour apprendre le B-A-BA en prog.

Avatar de l’utilisateur
Lutin
Messages : 2
Inscription : 26 Mai 2010 17:42

Re: Des portes (encore...)

Message par Lutin » 29 Mai 2010 18:38

Salut et merci pour la rapidité et la spontanéité de ta réponse. Quant à la mienne, pour une raison que j'ignore, a été postée plusieurs fois sans résultat. J'espère que cette fois sera la bonne. Un rapide bilan:

-J'ai ajouté l'empty game object, lui ai donné un rigidbody et une box collider et ai coché/décoché tout ce qui était necessaire
-J'ai créé un C Sharp Script avant d'y copier-coller le code que tu m'avais donné. Dans la page d'édition du code, je suis allé dans l'onglet langage et j'ai sélectionné C#. J'ai également lu le code et j'ai l'impression que s'il permet bien d'ouvrir la porte si celle-ci est fermée lorsque le joueur passe dans le box collider de l'empty game object, il ne la fermera pas si elle est ouverte. C'est l'effet recherché, peut-être ne me suis-je pas assez bien exprimé lors de mon premier post.

Mais ne m'y connaissant pas assez pour en être sûr, j'ai continué pour voir ce que cela allait donner.

-J'ai appliqué un rigidbody sur mon First Personnal controller et ai pris le tag "player" dans la liste des tags.

Mais au moment d'assigner la variable porte par drag'n drop, elle n'apparait pas dans l'onglet "Default References" de l"inspector du script. (même en attendant).

Saurais-tu ce que je peux faire pour le finir? Est-ce que je dois chercher ailleurs la variable, est-ce que je dois rajouter/changer quelque chose dans le code? Ne doit-on pas mettre un Toggle quelque part dans le code pour obtenir l'effet recherché (je peux ouvrir la porte en marchant dans la zone, mais aussi la refermer si elle était ouverte)?

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

Re: Des portes (encore...)

Message par giyomuSan » 30 Mai 2010 01:40

le code que t as filer remi , ne prends pas en compte l'effet du ouvert / fermer ..ce que tu peu faire c ajouter un flag sur ta porte pour checker son statut

Code : Tout sélectionner


    using UnityEngine;
    using System.Collections;

    public class OuvrirPorte: MonoBehaviour {

       public GameObject porte;

      bool isOpen = false;
       
       void OnTriggerEnter(Collider other)
       {
          if(other.tag=="player" && !isOpen)
          {
             //Si la porte est fermer on l'ouvre
             porte.transform.Translate(new Vector3(1,0,0)); // tu peux changer les valeurs!

             //Et on change le statut de la porte
             isOpen = !isOpen;
          }
          else if(other.tag=="player" && isOpen)
          {
             //Ici on est ds le cas ou la porte est ouverte ..mettre du code pour gerer cet etat
             //Si besoin...par exemple on la ferme, tu peu utiliser un trigger de l autre cote de la porte
             //avec le meme code 
            porte.transform.Translate(new Vector3(-1,0,0)); 

            //Et on oublie pas de changer notre flag 
            isOpen = !isOpen;
          }
       }
       
    }

Comme tu utilise OnColliderEnter , il va executer le code a chaque detection , une seule fois , donc en mettant un trigger de chaque cote de la porte qd tu va la premiere fois rentrer dedans ta porte s ouvrira, puis qd tu va rentrer ds le second trigger cette fois ci comme la porte est ouverte il va executer le code ds le "else if" et fermer la porte.

la ligne concernant el "isOpen = !isOpen", c'est un simple toogle de valeur sur des boolean qui ne peuvent prendre que 2 etat max Vrai ou faux donc si siOpen est vrai on le passe a faux de cette maniere et vice versa ...

voila bon courage ..mais comme te l'as dit remi , je te conseillerais aussi de prendre un peu de temsp pour apprendre un peu le language par lui meme et peut etre ne faire que de simple console app avec Visual C# par exemple histoire de te familiariser avec tout ca ..apres se debrouiller avec l API d unity ca ca viens a force d avoir le nez dedans , mais si t'es pas a l'aise avec au moins les bases du C# tu va tt l etemsp te retrouver bloquer et utiliser des script tout fais auquel tu risque de rien capter et que parconsequenet tu sera pas capable de les modifier pour tes besoins ...ce qui est dommage :(

bon courage ;)

duparcl
Messages : 25
Inscription : 26 Jan 2010 13:56
Localisation : TOULOUSE

Re: Des portes (encore...)

Message par duparcl » 08 Juin 2010 23:59

Salut,

Je pense que les derniers posts t'ont donnés tout les éléments nécessaire à la mise en place de ta scène avec les différentes interactions qui vont bien.

Cependant, avant de te lancer dans unity je pense que tu devrais commencer par faire de l'apprentissage javascript ou C#. Sans çà tu ne pourra pas aller bien lion dans tes réalisations.

Même si untiy permet très facilement de créer des environnements interactifs, il est nécessaire d'avoir au moins une base en programmation (si possible en POO). Je te conseil de faire quelques tutoriels en c#, de nombreux sites proposent d'excellente ressources.

Bon courage pour ton projet,
Duparc Loic
Email : duparcl@gmail.com
Phone : 06 72 59 65 31
Skype : duparcl

cerrebos
Messages : 1
Inscription : 13 Mars 2011 13:08

Re: Des portes (encore...)

Message par cerrebos » 13 Mars 2011 13:11

Salut,

Attention à la majuscule à "Player" dans le script, visiblement c'est cela qui rendait tout inefficace chez moi !

Répondre

Revenir vers « Unity le logiciel »