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.
Sfida
MedioTre 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: sostituisciwindStrengthcon un campo pubblicowinddi tipo WindSettings e naviga awind.strength.WindVane: sostituiscistrengthcon un campo pubblicowinde fai in modo che le frecce modifichinowind.strength, così ogni barca ne risente. Il testo lo mostra, come inWind: 3.- Una build carica la risorsa Breeze da zero ogni volta che si avvia, facendo perdere il valore del vento del giocatore. Salva
wind.strengthcon la chiave PlayerPrefsWindogni 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;
}
}
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
1Componenti, non gerarchie
Componenti piccoliUno script base per i nemiciComponenti astrattiComponenti che collaboranoRiepilogo: torretta modulare4Dati serializzati
Classi serializzabiliListe nell'InspectorEnum nell'InspectorRiepilogo: tabella del bottino7Macchine a stati
Gli stati come classiUna macchina a statiTransizioniIntelligenze dei nemiciRiepilogo: stati della porta10Progetto: Sopravvissuto nell’arena
L’eroeTipi di nemici5ScriptableObjects
Asset di datiStatistiche delle armiImpostazioni condiviseOndate come datiRiepilogo: database degli oggetti