Paramètres partagés
Fait partie de la section Architecture de jeu dans Unity du Journey Unity de Coddy. Leçon 21 sur 50.
Un réglage de difficulté modifie tous les ennemis à la fois : il convient donc d’utiliser un seul asset auquel ils font tous référence. Chaque ennemi lit la vitesse de l’asset à chaque frame, et le bouton Hard du menu écrit dans ce même asset :
[CreateAssetMenu(menuName = "Game/Difficulty")]
public class Difficulty : ScriptableObject
{
public float enemySpeed = 2f;
}public class Enemy : MonoBehaviour
{
public Difficulty difficulty;
public Transform player;
void Update()
{
float step = difficulty.enemySpeed * Time.deltaTime;
transform.position = Vector3.MoveTowards(transform.position, player.position, step);
}
}// DifficultyMenu.cs, relié à l’onClick du bouton Hard
public Difficulty difficulty;
public void SetHard()
{
difficulty.enemySpeed = 4f;
}Les champs des ennemis et celui du menu contiennent tous le même asset. Ainsi, après SetHard(), le prochain Update de chaque ennemi lit la valeur 4, y compris les ennemis créés plus tard à partir d’un prefab dont le champ contient cet asset. Cela fonctionne parce que chaque ennemi lit difficulty.enemySpeed lorsqu’il se déplace. Un ennemi qui en a copié la valeur dans son propre champ dans Start continue de se déplacer à la vitesse 2.
L’endroit où se retrouve une modification effectuée pendant le jeu dépend de l’environnement dans lequel le jeu s’exécute. Une version compilée charge ses assets tels qu’ils étaient au moment de la compilation chaque fois qu’elle démarre. Le choix Hard du joueur est donc perdu lors de la partie suivante : pour conserver ce choix, enregistre-le avec PlayerPrefs et réécris-le dans l’asset au démarrage du jeu. Dans l’Editor, le jeu modifie l’asset de ton projet, et la modification reste après que tu as appuyé sur Stop, contrairement aux objets de la scène, qui retrouvent leurs valeurs de l’Inspector. La prochaine exécution avec Play démarre en mode Hard, et l’asset conserve la valeur 4 jusqu’à ce que tu la rétablisses.
Défi
MoyenTrois voiliers traversent la baie, poussés par le vent, et les flèches Haut et Bas augmentent et diminuent le vent entre 0 et 5. Mais chaque bateau possède son propre champ windStrength, et le WindVane ne modifie que son propre strength, donc les flèches ne changent rien sur l’eau. Partage plutôt un seul asset. WindSettings.cs est prêt, et l’asset Breeze du projet (strength 2) est assigné au champ wind de chaque bateau et du WindVane.
Sailboat: remplacewindStrengthpar un champ publicwindde type WindSettings, et navigue àwind.strength.WindVane: remplacestrengthpar un champ publicwind, et fais en sorte que les flèches modifientwind.strength, afin que chaque bateau le ressente. Le texte l’affiche, sous la formeWind: 3.- Une version compilée charge l’asset Breeze à nouveau à chaque démarrage, ce qui ferait perdre le réglage du vent du joueur. Enregistre
wind.strengthsous la clé PlayerPrefsWindà chaque modification, et dans Start, rétablis dans l’asset la valeur enregistrée. Un nouveau joueur conserve la valeur 2 de l’asset.
Appuie sur Play, modifie le vent, puis clique sur Stop et de nouveau sur Play, puis sur Check.
Essayez vous-même
using UnityEngine;
using UnityEngine.InputSystem;
using TMPro;
public class WindVane : MonoBehaviour
{
public TMP_Text windText;
public float strength = 2f;
void Start()
{
Show();
}
void Update()
{
if (Keyboard.current.upArrowKey.wasPressedThisFrame)
{
strength = Mathf.Min(strength + 1f, 5f);
Show();
}
if (Keyboard.current.downArrowKey.wasPressedThisFrame)
{
strength = Mathf.Max(strength - 1f, 0f);
Show();
}
}
void Show()
{
windText.text = "Wind: " + strength;
}
}
Cette leçon comprend un petit quiz. Commencez la leçon pour y répondre et suivre votre progression.
Toutes les leçons de Architecture de jeu dans Unity
1Des composants, pas des hiérarchies
Des composants simplesUn script de base pour les ennemisDes composants abstraitsDes composants qui fonctionnent ensembleRécapitulatif : tourelle modulaire4Données sérialisées
Classes sérialisablesListes dans l’inspecteurÉnumérations dans l’inspecteurRécapitulatif : table de butin7Machines à états
Les états sous forme de classesUne machine à étatsTransitionsLes cerveaux des ennemisRécapitulatif : états d’une porte10Projet : Survivant de l’arène
Le hérosTypes d’ennemis2Interfaces dans Unity
IDamageableInterfaces et TryGetComponentGetComponentsRécapitulatif : touche d’interaction5ScriptableObjects
Assets de donnéesStatistiques des armesParamètres partagésLes vagues sous forme de donnéesRécapitulatif : base de données d’objets