Zmena zloženého obrázka počas spustenia hry

Stránka aktualizovaná :
Dátum vytvorenia strany :

Prostredie overovania

Windows
  • Windows 11
Editor jednoty
  • 2020.3.25f1
Vstupné systémové balíky
  • 1.2.0

Predpoklady pre tento tip

Nasledujúce nastavenia sú vopred nakonfigurované ako predpoklad na vysvetlenie týchto tipov.

O zmene obrázka sprite

Ako môžete vidieť pri hraní 2D hry, často uvidíte scénu, kde sa obraz nastavený ako sprite prepína uprostred. Napríklad dvere sú najprv zatvorené, ale ich otvorením sa zobrazia ako otvorené dvere.

Aby ste to dosiahli, môžete pripraviť dva objekty, zatvorené dvere a otvorené dvere, a ukázať alebo skryť ich. Tu sa to pokúsime dosiahnuť prepnutím obrazu sprite.

Pridávanie a umiestňovanie obrázkov do projektu

Tentokrát potrebujete obrázok pred zmenou a obrázok po zmene, preto si pripravte dva. Tu UnityTipsUnityTipsChange je názov súboru , resp.

Odhoďte sprite z projektu a umiestnite ho. Po kliknutí na tlačidlo sa obrázok zmení, preto ho umiestnite z používateľského rozhrania.

Vytvorenie skriptu na zmenu obrázka

Vytvorte skript. Názov je ľubovoľný, ale v tomto prípade SpriteChange je to .

Tentoraz kliknite na tlačidlo tak, aby sa obrázok sprite zmenil v čase. Sprite, ktorý sa má zmeniť, bude tiež nastavený vopred. Ak ho zmeníte, môžete dynamicky vytvárať a konfigurovať zložené položky. Spôsob, ako to zmeniť, je v podstate rovnaký.

Skript vyzerá 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 pripravte sprite, objekt, ktorý sa má zmeniť, a sprite, ktorý bude obrazom po zmene.

GameObject Môžete vidieť, že môžete nastaviť cieľový objekt z hierarchie. Sprite Môže to byť otázka, čo nastaviť .

Preto si myslím, že "typ textúry" obrazového súboru pridaného do projektu je predvolene "Sprite (2D a UI)", takže ho možno automaticky považovať za sprite. Takže s ním môžete zaobchádzať ako so sprite jednoduchým nastavením obrazového súboru.

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

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

OnClick Očakáva sa, že metóda sa vyvolá po kliknutí na tlačidlo. Názov metódy je ľubovoľný.

OnClick V metóde prepíname obraz. Keďže je ten, ktorý má SpriteRenderer informácie o obrázku, dostaneme komponent z SpriteRenderer GameObject. SpriteRenderer Trieda má vlastnosť, v ktorej môžete obrázok vymeniť nastavením na sprite, ktorý má sprite nový obrázok.

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

// 省略

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

Po uložení skriptu ho priložte k objektu. Predmet, ktorý sa má pripojiť, je voliteľný, ale v tomto prípade EventSystem je pripojený k . Keďže existujú parametre "Target Sprite" a "Next Sprite", "Target Sprite" má sprite objekty z hierarchie, "Next Sprite" je nastavený na zmenený obrazový súbor z projektu.

Zadajte metódu zo OnClick skriptu pripojeného k udalosti EventSystem kliknutia tlačidla .

Spustite hru a skúste stlačiť tlačidlo. Ak sa obrázok zmení, je to úspech.