Menu
CoddyTech

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.

challenge icon

Défi

Moyen

Fais en sorte que les flèches modifient le vent sur tous les bateaux en partageant un seul asset.

  1. Dans Sailboat, remplace windStrength par public WindSettings wind; et fais avancer le voilier à wind.strength.
  2. Dans WindVane, remplace strength par public WindSettings wind;.
  3. Fais en sorte que les flèches modifient wind.strength (de 0 à 5) et que le texte l'affiche, comme Wind: 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

Entraînez-vous par vous-même : Playground Unity