Dans Unity, instancier des objets de manière dynamique est souvent nécessaire pour enrichir le gameplay.
Cependant, une mauvaise gestion de l’instanciation peut nuire aux performances, rendant le jeu moins fluide.
Cet article vous guidera sur l’utilisation optimale de Instantiate et InvokeRepeating pour créer des objets tout en préservant les performances.
Créez votre premier jeu 3D en C# avec Unity, étape par étape.
Dans un projet Unity, il est souvent nécessaire d’ instancier des objets de manière dynamique pendant le jeu. Cela peut être des balles, des ennemis, ou encore des objets interactifs. L’instanciation d’objets est une compétence essentielle pour rendre votre jeu interactif et riche en contenu.
- Instantiate
La méthode Instantiate() permet de créer une copie d’un objet existant dans la scène. C’est l’un des outils les plus couramment utilisés pour ajouter de nouveaux objets au jeu pendant l’exécution. Vous pouvez instancier n’importe quel GameObject ou prefab (un objet préfabriqué).
Par exemple, créons un script pour instancier une balle de tennis chaque fois que vous appuyez sur la touche Espace. Le script prend en compte un prefab de balle que vous devez lier via l’Inspector.
usingUnityEngine;
publicclassTennisBallSpawner : MonoBehaviour {
[SerializeField] privateGameObject
tennisBallPrefab; // Le prefab de la balle de tennis
[SerializeField] privateTransform spawnPoint; // Point de départ de la balle
voidUpdate() {
// Si la touche espace est appuyée, on instancie une balle
if (Input.GetKeyDown(KeyCode.Space)) {
// Instanciation de la balle à la position et la rotation du point de
// spawn
Instantiate(tennisBallPrefab, spawnPoint.position, spawnPoint.rotation);
Debug.Log("Balle de tennis instanciée !");
}
}
}
En somme nous avons :
- tennisBallPrefab :Un prefab de balle de tennis que vous devez glisser dans
l’Inspector.
- spawnPoint.position :Définit la position à laquelle la balle sera instanciée.
- spawnPoint.rotation :Utilise la rotation du point de spawn pour orienter la balle.
- Input.GetKeyDown(KeyCode.Space) :Déclenche l’instanciation à l’appui de la touche
Espace.
Lorsque vous utilisez Instantiate(), il est souvent utile de récupérer l’instance de l’objet créé , afin de modifier ses propriétés immédiatement après sa création ; comme suit :
GameObject newBall = Instantiate(tennisBallPrefab);
- InvokeRepeating
InvokeRepeating() est utilisé pour appeler une fonction de manière répétée après un certain délai. Cela peut être utile pour instancier des objets de manière continue, comme des ennemis ou des projectiles.
Voici un exemple pour instancier une balle toutes les deux secondes.
usingUnityEngine;
publicclassRepeatedBallSpawner : MonoBehaviour {
publicGameObject tennisBallPrefab;
publicTransform spawnPoint;
voidStart() {
// Appelle la fonction "SpawnBall" toutes les 2 secondes après un délai
// initial de 1 seconde
InvokeRepeating("SpawnBall", 1f, 2f);
}
voidSpawnBall() {
Instantiate(tennisBallPrefab, spawnPoint.position, spawnPoint.rotation);
Debug.Log("Nouvelle balle de tennis instanciée !");
}
}
InvokeRepeating(« SpawnBall », 1f, 2f) indique qu’après 1 seconde, la fonction SpawnBall() est appelée toutes les 2 secondes. SpawnBall() instancie une balle à la position et la rotation du point de spawn à chaque appel.
Voici un aperçu du résultat :
Maintenant que vous maîtrisez l’instanciation, il est temps d’aborder un autre concept essentiel : comment rendre les objets persistants dans la scène, même lors des changements de niveaux ou de scènes.
Formez-vous gratuitement avec Alphorm !
Maîtrisez les compétences clés en IT grâce à nos formations gratuites et accélérez votre carrière dès aujourd'hui.
FAQ
Comment utiliser la méthode Instantiate() dans Unity?
Quels sont les impacts de performance liés à l'instanciation dans Unity?
Comment instancier des objets de manière répétée dans Unity?
Pourquoi récupérer l'instance d'un objet créé avec Instantiate()?
Comment utiliser InvokeRepeating() dans un script Unity?
Conclusion
En maîtrisant l’instanciation d’objets dans Unity, vous avez le pouvoir de créer des jeux plus dynamiques et interactifs. Quel autre aspect de Unity aimeriez-vous explorer pour améliorer encore vos projets?