Změna obrázku sprajtu za běhu hry

Stránky aktualizovány :
Datum vytvoření stránky :

Ověřovací prostředí

Windows
  • Systém Windows 11
Unity Editor
  • 2020.3.25f1
Balíčky vstupního systému
  • 1.2.0

Předpoklady pro tento tip

Následující nastavení jsou předem nakonfigurovaná jako předpoklad pro vysvětlení těchto tipů.

O změně obrázku sprajtu

Jak můžete vidět při hraní 2D hry, často uvidíte scénu, kde se obrázek nastavený jako sprajt přepne uprostřed. Například dveře jsou nejprve zavřené, ale jejich otevřením se zobrazí jako otevřené dveře.

Chcete-li toho dosáhnout, můžete připravit dva objekty, zavřené dveře a otevřené dveře, a zobrazit je nebo skrýt. Zde se toho pokusíme dosáhnout přepnutím obrazu sprajtu.

Přidávání a umísťování obrázků do projektu

Tentokrát potřebujete obrázek před změnou a obrázek po změně, proto si prosím připravte dva. UnityTipsUnityTipsChange Zde je název souboru , resp.

Pusťte sprajt z projektu a umístěte ho. Po kliknutí na tlačítko se obrázek změní, takže umístěte tlačítko z uživatelského rozhraní.

Vytvoření skriptu pro změnu obrázku

Vytvořte skript. Název je libovolný, ale v tomto případě SpriteChange je .

Tentokrát klikněte na tlačítko, aby se obraz sprajtu změnil v načasování. Také sprajt, který se má změnit, bude nastaven předem. Pokud ji změníte, můžete vytvářet a konfigurovat sprajty dynamicky. Způsob, jak to změnit, je v podstatě stejný.

Skript vypadá takto:

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

V poli si připravte sprajt, předmět, který chcete změnit, a sprajta, který bude po změně obrázkem.

GameObject Vidíte, že můžete nastavit cílový objekt z hierarchie. Sprite Může to být otázka, co nastavit v .

Z tohoto důvodu si myslím, že "typ textury" obrazového souboru přidaného do projektu je ve výchozím nastavení "Sprite (2D a UI)", takže s ním lze automaticky zacházet jako se sprajtem. Můžete s ním tedy zacházet jako se spritem, a to pouhým nastavením souboru obrázku.

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

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

OnClick Očekává se, že metoda bude volána při kliknutí na tlačítko. Název metody je libovolný.

OnClick V metodě přepínáme obraz. Vzhledem k tomu, že je ten, který má SpriteRenderer informace o obrázku, získáme komponentu z SpriteRenderer GameObject. SpriteRenderer Třída má vlastnost, kde můžete obrázek zaměnit nastavením na sprajt, který má sprite nový obrázek.

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

// 省略

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

Po uložení skript připojte k objektu. Objekt, který má být připojen, je volitelný, ale v tomto případě EventSystem je připojen k . Vzhledem k tomu, že parametry jsou "Target Sprite" a "Next Sprite", "Target Sprite" má sprite objekty z hierarchie, "Další Sprite" je nastaven na změněný obrazový soubor z projektu.

Určete metodu ze OnClick skriptu připojeného k události EventSystem kliknutí tlačítka.

Spusťte hru a zkuste stisknout tlačítko. Pokud se obraz změní, je to úspěch.