Paramètres partagés
Fait partie de la section Architecture de jeu dans Unity du Journey Unity de Coddy. Leçon 25 sur 64.
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 image, 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’événement onClick du bouton Hard
public Difficulty difficulty;
public void SetHard()
{
difficulty.enemySpeed = 4f;
}Les champs des ennemis et celui du menu contiennent tous une référence vers le même asset. Ainsi, après SetHard(), le prochain Update de chaque ennemi lit la valeur 4, y compris pour les ennemis créés ultérieurement à 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.
La destination d’une modification effectuée pendant le jeu dépend de l’endroit où le jeu s’exécute. Une version compilée charge ses assets tels qu’ils étaient au moment de sa création chaque fois qu’elle démarre ; le réglage Hard du joueur est donc perdu à la partie suivante. Pour conserver un choix, enregistrez-le avec PlayerPrefs et réécrivez-le dans l’asset au démarrage du jeu. Dans l’Editor, le jeu modifie l’asset présent dans votre projet, et la modification est conservée après avoir appuyé sur Stop, contrairement aux objets de la scène, qui reprennent leurs valeurs de l’Inspector. Le prochain « Jouer » démarre avec le réglage Hard, et l’asset conserve la valeur 4 jusqu’à ce que vous la rétablissiez.
Défi
MoyenFais en sorte que les flèches modifient le vent sur tous les bateaux en partageant un seul asset.
- Dans
Sailboat, remplacewindStrengthparpublic WindSettings wind;et fais avancer le voilier àwind.strength. - Dans
WindVane, remplacestrengthparpublic WindSettings wind;. - Fais en sorte que les flèches modifient
wind.strength(de 0 à 5) et que le texte l'affiche, commeWind: 3.
Appuie sur « Jouer », puis sur la flèche vers le haut : les trois bateaux accélèrent. Ensuite, appuie sur « Vérifier ».
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;
}
}
Toutes les leçons de Architecture de jeu dans Unity
1Des composants, pas des hiérarchies
De petits composantsUn script de base pour les ennemisComposants abstraitsDes composants qui fonctionnent ensembleRécapitulatif : tourelle modulaireRécapitulatif : canon double4Données sérialisées
Classes sérialisablesListes dans l’InspecteurÉnumérations dans l’InspecteurRécapitulatif : table de butinRécapitulatif : tirer le butin2Les interfaces dans Unity
IDamageableInterfaces et TryGetComponentGetComponentsRécapitulatif : touche d’interactionLe plus proche à portée5ScriptableObjects
Ressources de donnéesStatistiques des armesParamètres partagésSauver le ventLes vagues comme donnéesRécapitulatif : base de données des objetsRécapitulatif : acheter dans la boutique3Événements
Les événements C# dans UnityS’abonner dans OnEnableChamps UnityEventLes événements pilotent l’interfaceRécapitulatif : fenêtre de succèsRécapitulatif : minuteur de la fenêtreEntraînez-vous par vous-même : Playground Unity