Zmienianie obrazu duszka podczas działania gry

Strona zaktualizowana :
Data utworzenia strony :

Środowisko weryfikacyjne

Windows
  • Okna 11
Edytor aparatu Unity
  • 2020.3.25f1
Pakiety systemu wejściowego
  • 1.2.0

Wymagania wstępne dotyczące tej porady

Poniższe ustawienia są wstępnie skonfigurowane jako warunek wstępny wyjaśnienia tych wskazówek.

Informacje o zmienianiu obrazu ikonki

Jak widać podczas grania w grę 2D, często zobaczysz scenę, w której obraz ustawiony jako duszek przełącza się pośrodku. Na przykład drzwi są początkowo zamknięte, ale po ich otwarciu są wyświetlane jako drzwi otwarte.

Aby to osiągnąć, możesz przygotować dwa obiekty, zamknięte drzwi i otwarte drzwi, i pokazać je lub ukryć. Tutaj postaramy się to osiągnąć, przełączając obraz duszka.

Dodawanie i umieszczanie obrazów w projekcie

Tym razem potrzebujesz obrazu przed zmianą i obrazu po zmianie, więc przygotuj dwa. UnityTipsUnityTipsChange Tutaj nazwa pliku to odpowiednio , .

Upuść duszka z projektu i umieść go. Po kliknięciu przycisku obraz zmienia się, więc umieść przycisk w interfejsie użytkownika.

Tworzenie skryptu zmiany obrazu

Utwórz skrypt. Nazwa jest umowna, ale w tym przypadku SpriteChange jest to .

Tym razem kliknij przycisk, aby obraz duszka zmienił się w odpowiednim momencie. Również sprite, który ma zostać zmieniony, zostanie ustawiony z wyprzedzeniem. Jeśli go zmienisz, możesz dynamicznie tworzyć i konfigurować sprite'y. Sposób na zmianę jest w zasadzie taki sam.

Skrypt wygląda tak:

using UnityEngine;

public class SpriteChange : MonoBehaviour
{
  /// <summary>画像を変更するスプライトオブジェクト。</summary>
  [SerializeField] private GameObject TargetSprite;

  /// <summary>変更後の画像を持つスプライト。</summary>
  [SerializeField] private Sprite NextSprite;

  /// <summary>ボタンをクリックしたときに呼ばれます。</summary>
  public void OnClick()
  {
    if (TargetSprite == null)
    {
      Debug.Log($"{nameof(TargetSprite)} が null です。");
      return;
    }
    if (NextSprite == null)
    {
      Debug.Log($"{nameof(NextSprite)} が null です。");
      return;
    }

    // 変更対象のオブジェクトが持つ SpriteRenderer を取得
    var spriteRenderer = TargetSprite.GetComponent<SpriteRenderer>();
    if (spriteRenderer == null)
    {
      Debug.Log($"{nameof(TargetSprite)} に {nameof(SpriteRenderer)} コンポーネントがありません。");
      return;
    }

    // SpriteRenderer の sprite に変更後のスプライトをセット
    spriteRenderer.sprite = NextSprite;
  }
}

W polu przygotuj duszka, obiekt do zmiany i duszka, który będzie obrazem po zmianie.

GameObject Widać, że można ustawić obiekt docelowy z hierarchii. Sprite Może to być pytanie, co ustawić w .

W tym celu myślę, że "typ tekstury" pliku graficznego dodawanego do projektu to domyślnie "Sprite (2D i UI)", więc może być automatycznie traktowany jako sprite. Możesz więc traktować go jako sprite'a, po prostu ustawiając plik obrazu.

/// <summary>画像を変更するスプライトオブジェクト。</summary>
[SerializeField] private GameObject TargetSprite;

/// <summary>変更後の画像を持つスプライト。</summary>
[SerializeField] private Sprite NextSprite;

OnClick Oczekuje się, że metoda zostanie wywołana po kliknięciu przycisku. Nazwa metody jest dowolna.

OnClick W metodzie przełączamy obraz. Ponieważ jest tym, który ma SpriteRenderer informacje o obrazie, pobieramy komponent z SpriteRenderer GameObject. SpriteRenderer Klasa ma właściwość, w której można zamienić obraz, ustawiając go na duszka, który ma sprite nowy obraz.

// 変更対象のオブジェクトが持つ SpriteRenderer を取得
var spriteRenderer = TargetSprite.GetComponent<SpriteRenderer>();

// 省略

// SpriteRenderer の sprite に変更後のスプライトをセット
spriteRenderer.sprite = NextSprite;

Po zapisaniu skryptu dołącz go do obiektu. Obiekt, który ma zostać dołączony, jest opcjonalny, ale w tym przypadku EventSystem jest dołączony do . Ponieważ istnieją parametry "Target Sprite" i "Next Sprite", "Target Sprite" ma obiekty sprite z hierarchii, "Następny Sprite" jest ustawiany na zmieniony plik obrazu z projektu.

Określ metodę ze OnClick skryptu dołączonego do zdarzenia EventSystem kliknięcia przycisku.

Uruchom grę i spróbuj nacisnąć przycisk. Jeśli wizerunek się zmieni, to sukces.