Menu
CoddyTech

Configuración compartida

Parte de la sección Arquitectura de juegos en Unity del Journey de Unity de Coddy. Lección 25 de 64.

Un ajuste de dificultad cambia a todos los enemigos a la vez, así que encaja en un recurso al que todos hacen referencia. Cada enemigo lee la velocidad del recurso en cada fotograma, y el botón Hard del menú escribe en ese mismo recurso:

[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, conectado al onClick del botón Hard
public Difficulty difficulty;

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

Los campos de los enemigos y el campo del menú contienen el mismo recurso, así que después de SetHard(), la siguiente ejecución de Update de cada enemigo lee 4, incluidos los enemigos que aparezcan más tarde a partir de un prefab que tenga el recurso en su campo. Esto funciona porque cada enemigo lee difficulty.enemySpeed cuando se mueve. Un enemigo que lo haya copiado en uno de sus propios campos en Start seguirá moviéndose a 2.

El lugar donde acaba un cambio hecho durante el juego depende de dónde se ejecute el juego. Una compilación carga sus recursos tal como estaban al compilarse cada vez que se inicia, así que el ajuste Hard del jugador desaparece en la siguiente partida: para conservar una elección, guárdala con PlayerPrefs y escríbela de nuevo en el recurso cuando se inicie el juego. En el Editor, el recurso del proyecto es el que cambia el juego, y el cambio se mantiene después de pulsar Stop, a diferencia de los objetos de la escena, que vuelven a sus valores del Inspector. La siguiente vez que pulses Play, empezará en Hard, y el recurso conservará el valor 4 hasta que lo restablezcas.

challenge icon

Desafío

Intermedio

Haz que las flechas cambien el viento en todos los barcos compartiendo un mismo recurso.

  1. En Sailboat, reemplaza windStrength por public WindSettings wind; y navega a wind.strength.
  2. En WindVane, reemplaza strength por public WindSettings wind;.
  3. Haz que las flechas cambien wind.strength (de 0 a 5) y que el texto lo muestre, como Wind: 3.

Pulsa «Jugar» y pulsa la flecha hacia arriba: los tres barcos aceleran. Después, pulsa «Comprobar».

Pruébalo tú mismo

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

Todas las lecciones de Arquitectura de juegos en Unity

Practica por tu cuenta: Playground de Unity