Menu
CoddyTech

Impostazioni condivise

Fa parte della sezione Architettura dei giochi in Unity del percorso Unity di Coddy. Lezione 25 di 64.

Un'impostazione di difficoltà cambia tutti i nemici contemporaneamente, quindi è adatta a una risorsa a cui fanno riferimento tutti. Ogni nemico legge la velocità della risorsa a ogni frame, e il pulsante Hard del menu scrive nella stessa risorsa:

[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, collegato all'onClick del pulsante Hard
public Difficulty difficulty;

public void SetHard()
{
    difficulty.enemySpeed = 4f;
}

I campi dei nemici e quello del menu contengono la stessa risorsa, quindi dopo SetHard() il successivo Update di ogni nemico legge 4, compresi i nemici generati in seguito da un prefab che ha la risorsa nel proprio campo. Funziona perché ogni nemico legge difficulty.enemySpeed quando si muove. Un nemico che ne ha copiato il valore in un proprio campo in Start continua a muoversi a 2.

Il luogo in cui finisce una modifica apportata durante il gioco dipende da dove viene eseguito il gioco. Una build carica ogni volta che si avvia le risorse così come erano al momento della build, quindi la scelta Difficile del giocatore non viene mantenuta nella partita successiva: per conservare una scelta, salvala con PlayerPrefs e riscrivila nella risorsa quando il gioco si avvia. Nell'Editor, la risorsa nel progetto è quella che il gioco modifica e la modifica rimane anche dopo aver premuto Stop, a differenza degli oggetti della scena, che tornano ai valori dell'Inspector. La successiva pressione di Play avvia il gioco in modalità Difficile e la risorsa mantiene il valore 4 finché non lo reimposti.

challenge icon

Sfida

Medio

Fai in modo che le frecce cambino il vento su ogni barca condividendo una risorsa.

  1. In Sailboat, sostituisci windStrength con public WindSettings wind; e naviga a wind.strength.
  2. In WindVane, sostituisci strength con public WindSettings wind;.
  3. Fai in modo che le frecce cambino wind.strength (da 0 a 5) e che il testo lo mostri, come in Wind: 3.

Premi «Gioca» e premi la freccia su: tutte e tre le barche accelerano. Poi premi «Verifica».

Provalo tu

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;
    }
}

Tutte le lezioni di Architettura dei giochi in Unity

Esercitati da solo: Playground Unity