Animation ? Material ?

Questions techniques liées à l’utilisation d'Unity (et n'entrant pas dans le cadre d'une des sections suivantes)
Chamalo
Messages : 18
Inscription : 26 Juin 2016 21:19

Animation ? Material ?

Message par Chamalo » 04 Jan 2017 19:44

Bonjour à tous. Je souhaite faire un truc comme ceci sur unity :

Image

Mais je n'ai aucune idée de comment faire, ni que chercher sur google comme mot clé pour trouver ce que je cherche. L'idéal serait de faire un prefab et de pouvoir tracer un chemin comme je le veux. Voila, si vous ne savez pas comment faire mais connaissez une technique ou juste un mot clé qui pourrait m'aider je suis prenneur. Merci :-D .

Avatar de l’utilisateur
F@B
Messages : 1844
Inscription : 01 Août 2013 10:41
Contact :

Re: Animation ? Material ?

Message par F@B » 04 Jan 2017 22:40

Salut

c'est le trait rouge qui pose probleme ?
une solution serait de déplacer l'UV du material avec un "cutout" ? ainsi ta texture rouge se déplace sur ton mesh.
ʕ·͡ᴥ·ʔ ==> Mon Portfolio <== ʕ·͡ᴥ·ʔ

Merci de lire et de prendre en considération la Nétiquette des Forums avant de poster un sujet !

Chamalo
Messages : 18
Inscription : 26 Juin 2016 21:19

Re: Animation ? Material ?

Message par Chamalo » 05 Jan 2017 20:25

Salut, merci de ta réponse. Oui c'est le trait rouge qui m'embête, mais j'ai trouvé une solution, mais peut être pas très optimisée et c'est un peu du bricolage.

En fait j'ai juste joué sur le facteur scale d'un cube rouge, et le scale s'arrête quand il atteint un box collider placé au bout comme ça : (je sais pas si c'est très clair.

Image

et en play ça donne ça :

Image

Et les scripts pour ceux que ça intéresse :

Le trait rouge :

Code : Tout sélectionner

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

public class RedExpand : MonoBehaviour {

	public bool etendre = true;

	void Start () {
		
	}
	

	void Update () {

		if (etendre == true && ActivePressurePlate.isPlaque == true) {
			transform.localScale += new Vector3 (0.1F, 0, 0);
		} 
		if(etendre == false){

			transform.localScale = transform.localScale;
	
		}


	}

	void OnTriggerEnter(Collider other){

		if (other.tag == "Bonus") {

			etendre = false;
		}
	}
}
La plaque :

Code : Tout sélectionner

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

public class ActivePressurePlate : MonoBehaviour {

	public AudioClip soundtick;
	public AudioSource audiosource;
	public static bool isPlaque = false;

	// Use this for initialization
	void Start () {
		
	}
	
	// Update is called once per frame
	void Update () {
		
	}

	void OnTriggerEnter(Collider other){

		transform.Translate (0,-0.01f,0);
		transform.Translate (0,-0.01f,0);
		GetComponent<AudioSource> ().PlayOneShot (soundtick);
		isPlaque = true;
	}

	void OnTriggerExit(Collider other){

		transform.Translate (0,0.01f,0);
		transform.Translate (0,0.01f,0);
		GetComponent<AudioSource> ().PlayOneShot (soundtick);
		isPlaque = false;

	}
}
voila, pour la porte je devrai m'en sortir et pour que le trait fasse un angle je pensais instancier une copie du trait avec un scale dans un autre axe par exemple, toujours pour pouvoir en faire un prefab facilement; Si vous avez des meilleurs idées je suis toujours preneur :D

Moi 1971
Messages : 727
Inscription : 29 Sep 2015 13:38

Re: Animation ? Material ?

Message par Moi 1971 » 06 Jan 2017 11:27

Bonjour,
Il y a des trucs qui ne vont pas dans ton code.
Tout ce qui est modification visuelle doit se faire dans la fonction FixedUpdate() et pas dans la fonction Update(). Voir la doc pour la différence entre les deux.
Tes conditions sont très mal exprimées. Si tu fais un test :

Code : Tout sélectionner

if (etendre == true)

Si ce test est faut, alors pas besoins de tester son contraire, il faut utiliser un "else" qui fait le boulot très bien sans consommer de temps CPU pour rien.
De plus, le test si dessus est égal à celui-ci:

Code : Tout sélectionner

if (etendre)
Alors c'est une habitude à prendre pour un informaticien de lire/écrire ce test comme ceci. Un booléen est forcément égal à True ou False.
Donc ça écrit

Code : Tout sélectionner

if (etendre) // Si etendre == true
ou
if (!etendre)  // Si etendre == false
il faut utiliser le "==" ou "!=" pour les booléens quand on compare deux booléens entre eux.

Code : Tout sélectionner

if (fin != debut)
En suite, le pire :

Code : Tout sélectionner

if(etendre == false){

         transform.localScale = transform.localScale;
   
      }
Ce code ne sert à rien.Il faut l'enlever.

Pour le script "la plaque" dans la fonction "OnTriggerEnter" Pourquoi faire deux fois de suite "transform.Translate (0,-0.01f,0);" ?
Pourquoi ne pas faire en une fois "transform.Translate (0,-0.02f,0);"? Pareil dans exit.
bon code...

Répondre

Revenir vers « Unity le logiciel »