Menu
CoddyTech

Współdzielone ustawienia

Część sekcji Architektura gier w Unity ścieżki Unity w Coddy. Lekcja 25 z 64.

Ustawienie poziomu trudności zmienia od razu wszystkich przeciwników, dlatego pasuje do niego jeden zasób, do którego wszyscy się odwołują. Każdy przeciwnik odczytuje z zasobu prędkość w każdej klatce, a przycisk Hard w menu zapisuje wartość w tym samym zasobie:

[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, podłączony do onClick przycisku Hard
public Difficulty difficulty;

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

Pola przeciwników i pole menu przechowują odwołanie do tego jednego zasobu, więc po wywołaniu SetHard() następne Update każdego przeciwnika odczyta wartość 4; dotyczy to także przeciwników utworzonych później z prefabrykatu, który ma ten zasób w swoim polu. Działa to dlatego, że każdy przeciwnik odczytuje difficulty.enemySpeed podczas ruchu. Przeciwnik, który skopiował tę wartość do własnego pola w Start, nadal porusza się z prędkością 2.

To, gdzie trafia zmiana wprowadzona podczas gry, zależy od tego, gdzie gra jest uruchomiona. Wersja kompilacyjna ładuje swoje zasoby w stanie z chwili kompilacji za każdym razem, gdy się uruchamia, więc ustawienie Hard wybrane przez gracza nie zostanie zachowane w następnej grze: aby zachować wybór, zapisz go za pomocą PlayerPrefs i zapisz z powrotem do zasobu podczas uruchamiania gry. W edytorze zmieniany jest zasób w projekcie, a zmiana pozostaje po naciśnięciu Stop, w przeciwieństwie do obiektów sceny, które wracają do wartości z Inspektora. Następne uruchomienie za pomocą Play rozpocznie się na poziomie Hard, a zasób zachowa wartość 4, dopóki jej nie zmienisz.

challenge icon

Wyzwanie

Średni

Spraw, aby strzałki zmieniały siłę wiatru na każdej łodzi dzięki współdzieleniu jednego zasobu.

  1. W Sailboat zastąp windStrength przez public WindSettings wind; i płyń z prędkością wind.strength.
  2. W WindVane zastąp strength przez public WindSettings wind;.
  3. Spraw, aby strzałki zmieniały wind.strength (od 0 do 5), a tekst wyświetlał tę wartość, na przykład Wind: 3.

Naciśnij „Graj” i strzałkę w górę: wszystkie trzy łodzie przyspieszą. Następnie naciśnij „Sprawdź”.

Spróbuj swoich sił

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

Wszystkie lekcje w sekcji Architektura gier w Unity

Poćwicz samodzielnie: Edytor online Unity