Tukar imej sprite semasa permainan sedang berjalan

Laman dikemaskini :
Tarikh penciptaan halaman :

Persekitaran pengesahan

Windows
  • Windows 11
Penyunting Perpaduan
  • 2020.3.25f1
Pakej Sistem Input
  • 1.2.0

Prasyarat untuk petua ini

Tetapan berikut telah diprakonfigurasi sebagai prasyarat untuk penjelasan petua ini.

Mengenai mengubah imej sprite

Seperti yang anda lihat semasa bermain permainan 2D, anda sering akan melihat adegan di mana imej ditetapkan sebagai suis sprite di tengah. Sebagai contoh, pintu ditutup pada mulanya, tetapi dengan membukanya, ia dipaparkan sebagai pintu terbuka.

Untuk mencapai matlamat ini, anda boleh menyediakan dua objek, pintu tertutup dan pintu terbuka, dan menunjukkan atau menyembunyikannya. Di sini, kami akan cuba mencapainya dengan menukar imej sprite.

Menambah dan meletakkan imej dalam projek

Kali ini, anda memerlukan imej sebelum perubahan dan imej selepas perubahan, jadi sila sediakan dua. Di sini, nama fail ialah , masing-masingUnityTipsUnityTipsChange.

Jatuhkan sprite dari projek dan letakkannya. Apabila butang diklik, imej berubah, jadi letakkan butang dari UI.

Mencipta skrip perubahan imej

Buat skrip. Nama itu sewenang-wenangnya, tetapi dalam kes SpriteChange ini , ia adalah .

Kali ini, klik butang supaya imej sprite berubah pada masa. Juga, sprite yang akan diubah akan ditetapkan terlebih dahulu. Jika anda mengubahnya, anda boleh mencipta dan mengkonfigurasi sprites secara dinamik. Cara untuk mengubahnya pada dasarnya adalah sama.

Skrip kelihatan seperti ini:

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

Dalam medan, sediakan sprite, objek yang akan diubah, dan sprite yang akan menjadi imej selepas perubahan.

GameObject Anda boleh melihat bahawa anda boleh mengesetkan objek sasaran daripada hierarki. Sprite Ia mungkin persoalan tentang apa yang perlu ditetapkan .

Untuk ini, saya fikir bahawa "jenis tekstur" fail imej yang ditambahkan pada projek adalah "Sprite (2D dan UI)" secara lalai, jadi ia boleh dianggap secara automatik sebagai sprite. Jadi, anda boleh menganggapnya sebagai sprite hanya dengan menetapkan fail imej.

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

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

OnClick Kaedah ini dijangka dipanggil apabila butang diklik. Nama kaedah sewenang-wenangnya.

OnClick Dalam kaedah ini, kami menukar imej. Oleh kerana yang mempunyai SpriteRenderer maklumat imej, kami mendapat komponen dari SpriteRenderer GameObject. SpriteRenderer Kelas ini mempunyai sifat di mana anda boleh menukar imej dengan menetapkannya kepada sprite yang mempunyai sprite imej baru.

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

// 省略

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

Selepas anda menyimpan skrip, pasangkannya pada objek. Objek yang akan dilampirkan adalah pilihan, tetapi dalam kes EventSystem ini , ia dilampirkan kepada . Oleh kerana terdapat "Target Sprite" dan "Next Sprite" sebagai parameter, "Target Sprite" mempunyai objek sprite dari hierarki, "Next Sprite" ditetapkan kepada fail imej yang diubah daripada projek.

Tentukan kaedah dari OnClick skrip yang dilampirkan pada acara EventSystem klik butang .

Jalankan permainan dan cuba tekan butang. Jika imej berubah, ia berjaya.