Menu
CoddyTech

Impostazioni condivise

Fa parte della sezione Architettura dei giochi in Unity del percorso Unity di Coddy. Lezione 21 di 50.

Un'impostazione della difficoltà modifica tutti i nemici contemporaneamente, quindi è adatta a una singola 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 il campo del menu contengono la stessa risorsa, quindi dopo SetHard() l'Update successivo 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 l'ha copiata 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 creazione, quindi la scelta Hard del giocatore non viene mantenuta nella partita successiva: per conservare una scelta, salvala con PlayerPrefs e riscrivila nella risorsa all'avvio del gioco. Nell'Editor, la risorsa nel progetto è quella modificata dal gioco, e la modifica rimane anche dopo aver premuto Stop, a differenza degli oggetti della scena, che tornano ai valori dell'Inspector. La volta successiva che premi Play, la difficoltà è Hard e la risorsa mantiene 4 finché non la reimposti.

challenge icon

Sfida

Medio

Tre barche a vela attraversano la baia spinte dal vento, e le frecce Su e Giù aumentano e diminuiscono il vento tra 0 e 5. Ma ogni barca ha il proprio campo windStrength e WindVane modifica solo il proprio strength, quindi le frecce non cambiano nulla sull'acqua. Condividi invece un'unica risorsa. WindSettings.cs è pronta e la risorsa Breeze del progetto (forza 2) è assegnata al campo wind di ogni barca e di WindVane.

  • Sailboat: sostituisci windStrength con un campo pubblico wind di tipo WindSettings e naviga a wind.strength.
  • WindVane: sostituisci strength con un campo pubblico wind e fai in modo che le frecce modifichino wind.strength, così ogni barca ne risente. Il testo lo mostra, come in Wind: 3.
  • Una build carica la risorsa Breeze da zero ogni volta che si avvia, facendo perdere il valore del vento del giocatore. Salva wind.strength con la chiave PlayerPrefs Wind ogni volta che cambia e, in Start, ripristina nella risorsa il valore salvato. Un nuovo giocatore mantiene il valore 2 della risorsa.

Premi Gioca, modifica il vento, poi Ferma e premi di nuovo Gioca, quindi 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;
    }
}
quiz iconMettiti alla prova

Questa lezione include un breve quiz. Inizia la lezione per rispondere e tenere traccia dei tuoi progressi.

Tutte le lezioni di Architettura dei giochi in Unity