Codes de base Unity
Animation 3D
-Déclencher une animation de l’objet que l’on clique :
MonGameObject.GetComponent<Animator>().Play("le state de l’Animator à aller");
Par
exemple:
Hero.GetComponent<Animator>().Play("sauter");
-Déclencher
une animation dont l’animator est un parent de l’objet
cliqué. Ajouter autant de ‘.parent’
qu’il y a de niveaux de hiérarchie pour se rendre au parent supérieur ciblé
(celui contenant l’animator, 3 dans l’exemple
ici). Attention d’ajouter transform avant dans
ce cas-ci.
public class Clique : MonoBehaviour
{
void OnMouseDown()
{
transform.parent.parent.parent.GetComponent<Animator>().Play("power_on");
}
}
{
void OnMouseDown()
{
GetComponentInParent<Animator>().Play("power_on");
}
}
{
public class Hero : MonoBehaviour {
[SerializeField] Animator Bob;
void OnMouseDown()
{
Bob().Play("power_on");
}
-Déclencher une animation dont l’animator
est sur un autre objet de la scène :
public class Clique : MonoBehaviour
{
void OnMouseDown()
{
GameObject.Find(“machine”).GetComponent<Animator>().Play("power_on");
}
}
-Déclencher une fonction (ex : Demarre()
) d’un script d’un objet (voiture) depuis un autre objet/script :
GameObject la_voiture = GameObject.Find(“voiture”);
la_voiture.GetComponent<Son_script>().Demarre();
Faire bouger un objet ‘rigidBody’ à
la vitesse speed sur l’axe des Z
(x,y,z):
void Update()
{
GetComponent<Rigidbody>().velocity = new Vector3(0, 0, speed);
}
-En 3d, une position est exprimée par 3 axes, x,y,z. On doit
spécifier les 3 axes à chaque fois, même si c’est seulement un axe qu’on veut
changer. On peut ‘interroger’ (lire) la position d’un seul axe (monGameObject.transform.position.z), mais pour le changer,
on doit toujours définir les 3 axes en même temps, via un Vector3 :
MonGameObject.transform.position= new Vector3(-1, 2, 5);
Ainsi, pour placer un objet à la
position verticale (y) 5, sans affecter
ses autres axes, on fait :
MonGameObject.transform.position= new Vector3(transform.positions.x, 5 ,transform.positions.z);
Faire apparaitre ou disparaitre
un objet, sans le désactiver :
GetComponent<MeshRenderer>().enabled = false;
Désactiver un objet complètement (invisible et script Update
désactivé), sans l’éliminer.
MonGameObject.SetActive(false);
Éliminer complètement un objet (runtime) :
Destroy(MonGameObject)(false);
https://docs.unity3d.com/ScriptReference/Object.Destroy.html
Donner une position à un GameObject
(x,y,z) :
Nouvelle_position = new Vector3(x,y,z);
MonGameObjet.transform.position= Nouvelle_position;
Faire bouger un objet d’un point (vector3) vers un autre
point, à la vitesse 5 :
void Update()
{
MonGameObject.transform.position = Vector3.MoveTowards(position_depart, positionArrivee, 5);
}
https://docs.unity3d.com/ScriptReference/Vector3.MoveTowards.html
Déclencher une fonction (Go) de l’objet B lorsque l’objet B touche l’objet. L’objet B lui a un script (Bouge_cubes) qui contient une fonction Go(). Le script suivant est sur l’objet A :
void OnTriggerEnter(Collider other) ///script
sur l’objet A
{
other.gameObject.GetComponent<Bouge_cubes>().Go();
}
Démarrer une animation à un 'temps'
différent que le début de celle-ci (ici le temps est dans la variable myTime et
varie entre 0=debut et 1=fin)
Ici 'porte_ouvre' est le nom du clip (state); 0 est le numéro du premier layer ; et myTime est la position de départ du Play (0.5=milieu)
Float myTime=0.5f; /// 0.5= le
milieu de l'animation
GetComponent
Obtenir le temps écoulé d'une
animation qui joue, de 0 (debut) à 1 (lorsqu'elle est terminée) . En paramètre
le numéro du layer si plus qu'un (premier layer=0)
GetComponent
Jouer un son losqu'on clique un
objet:
//
Champs requis - placer au dessus de la méthode
Start()
private AudioSource _monAudioSource;
[SerializeField] private
AudioClip _monAudioClip;
//
Associer votre AudioClip à ce champ exposé dans
l'inspecteur // Dans Start()
_monAudioSource = GetComponent
// Ensuite
pour faire jouer le son au moment voulu...
_monAudioSource.PlayOneShot(_monAudioClip);
Démarrer une animation de 'retour (rewind)' (
ex:fermer) au même temps relatif que celle en cours (ouverture)
public class Clique_porte : MonoBehaviour {
private Animator Anim;
private int swt = 0;
private AnimatorStateInfo animationState;
private AnimatorClipInfo[] myAnimatorClip;
void Start() {
Anim = transform.parent.parent.GetComponent<Animator>();
}
void OnMouseDown()
{
animationState = Anim.GetCurrentAnimatorStateInfo(0);///doit être redéfinit à chaque fois car clip change...
float myTime = Mathf.Abs(1
- animationState.normalizedTime);
if (animationState.normalizedTime
> 1) myTime = 0;////si
animation termine et donc plus loin que 1, animation doit rewind
if (swt == 0) {
Anim.Play("porte_ouvre", 0, myTime);
swt
= 1; }
else
{
swt = 0;
Anim.Play("porte_ferme", 0, myTime);
}
}
}
Changer de caméra: (il faut désactiver les autres !)
void Update(); if (Input.GetKey(KeyCode.Alpha2)) { |
Déclencher une animation avec les touches du clavier (w)en passant par les variables bool de l'animator de Unity
void Update(); if (Input.GetKey(KeyCode.W)) { |
Déclencher une animation de changements de plans de caméras:
1-Créer un asset de type Timeline/Timeline et y ajouter tes caméras dans l'ordre voulu
2-Ajouter un Component de type PlayableDirector à un objet de la scène. Draguer le Timeline dans le paramètre 'Playable' de ce component. Décocher PLay on awake.
3-Il sera alors possible de déclencher ce timeline par le code suivant:
GameObject.Find("LeGameObjet").<PlayableDirector>().Play();