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.
Sfida
MedioFai in modo che le frecce cambino il vento su ogni barca condividendo una risorsa.
- In
Sailboat, sostituisciwindStrengthconpublic WindSettings wind;e naviga awind.strength. - In
WindVane, sostituiscistrengthconpublic WindSettings wind;. - Fai in modo che le frecce cambino
wind.strength(da 0 a 5) e che il testo lo mostri, come inWind: 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
1Componenti, non gerarchie
Componenti piccoliUno script base per i nemiciComponenti astrattiComponenti che collaboranoRipasso: torretta modulareRipasso: cannone doppio4Dati serializzati
Classi serializzabiliElenchi nell'InspectorEnum nell'InspectorRiepilogo: tabella del bottinoRiepilogo: tira il bottino2Interfacce in Unity
IDamageableInterfacce e TryGetComponentGetComponentsRiepilogo: tasto InteragisciRiepilogo: il più vicino a portata5ScriptableObjects
Asset di datiStatistiche delle armiImpostazioni condiviseSalva il ventoOnde come datiRiepilogo: database degli oggettiRiepilogo: comprare dal negozioEsercitati da solo: Playground Unity