Day 4-5-6
- Création d’un obstacle inesquivable
- Le GlassWall : mur de verre
Okay le mur de verre est rouge … mais c’est un prototype, il n’a pas besoin d’être beau. Le mur détruit est à coté : c’est juste une division en cubes plus petit. Pas besoin de plus tant que le code marche …
- Changement de texture à chaque Hit : Création du code « BreakingGlass »
- 3 Hits et il est détruit
- Mouvement inexorable vers le joueur : la vitre fonce vers vous
- Bagarre sur comment changer de texture à chaque hit :
- Définir un tableau qui contient les textures
- 1er texture = texture à afficher
- changer de texture à chaque hit
- faire un décompte : 1 tir = prochaine texture du tableau
- quand il n’y a plus de texture dans le tableau : l’objet est détruit
- materialNumber += increase;
if (materialNumber != materials.Length)
{
actualTexture.sharedMaterial = materials[materialNumber]; // éviter les Out of Array
}
- materialNumber += increase;
- Instancier une animation de destruction : quand le mur est détruit il tombe en morceaux
- Création d’un nouvel objet : les shrapnels de verre. Création de cubes plus petit
- Ça marche mais les cubes tombent raide, sans prendre en compte la vitesse de la vitre …
- Se battre avec la commande Instantiate …
- La solution fut la suivante : l’objet instancié est mis en mémoire dans une variable
- capturer le RigidBody (contient les infos de masse et de vitesse) de chaque enfant de l’objet (le mur détruit est le « parent », les débris sont les « enfants« . Quand le mur est détruit, il est remplacé par les débris)
- créer un tableau qui contient tous les RigidBody des enfant
- leurs dire : votre vitesse est celle de la vitre détruite
- En code ça donne :
- //Instancier l’objet
GameObject glass;
glass = Instantiate(glassExplosion, gameObject.transform.position, gameObject.transform.rotation);
//lui faire hériter la vélocité du parent pour le mouvement des shrapnel
Rigidbody[] rbclone; //créer un tableau pour inclure les rigidbody des enfants
rbclone = glass.GetComponentsInChildren<Rigidbody>(); //prendre les RigidBody des enfants de glass
foreach (Rigidbody rbchildren in rbclone)
{
rbchildren.velocity = this.gameObject.GetComponent<Rigidbody>().velocity; //pour chacun, leur atribuer la vélocité
}
//Destroy The Glass
Destroy(this.gameObject);
- On a un mur qui avance vers le joueur et qui est destructible. Quand il est détruit les débris tombent en conservant la vitesse de la vitre détruite !
- Faire joujou avec les Renderer (les rendus) et les trainées pour obtenir un effet « Tron » aux tirs