Mengubah gambar sprite saat game sedang berjalan

Halaman Diperbarui :
Tanggal pembuatan halaman :

Lingkungan verifikasi

Windows
  • jendela 11
Editor Kesatuan
  • 25f1/3/2020
Paket Sistem Input
  • 1.2.0

Prasyarat untuk tip ini

Pengaturan berikut telah dikonfigurasi sebelumnya sebagai prasyarat untuk penjelasan tips ini.

Tentang mengubah gambar sprite

Seperti yang Anda lihat saat memainkan game 2D, Anda akan sering melihat adegan di mana gambar yang ditetapkan sebagai sprite beralih di tengah. Misalnya, pintu ditutup pada awalnya, tetapi dengan membukanya, itu ditampilkan sebagai pintu terbuka.

Untuk mencapai ini, Anda dapat menyiapkan dua objek, pintu tertutup dan pintu terbuka, dan menunjukkan atau menyembunyikannya. Di sini, kami akan mencoba mencapainya dengan mengganti gambar sprite.

Menambahkan dan menempatkan gambar dalam proyek

Kali ini, Anda membutuhkan gambar sebelum perubahan dan gambar setelah perubahan, jadi harap siapkan dua. Di sini, nama filenya UnityTipsUnityTipsChange adalah , masing-masing.

Jatuhkan sprite dari proyek dan tempatkan. Saat tombol diklik, gambar berubah, jadi letakkan tombol dari UI.

Membuat Skrip Perubahan Gambar

Buat skrip. Namanya sewenang-wenang, tetapi dalam kasus SpriteChange ini , itu adalah .

Kali ini, klik tombol sehingga gambar sprite berubah pada waktunya. Selain itu, sprite yang akan diubah akan diatur terlebih dahulu. Jika Anda mengubahnya, Anda dapat membuat dan mengonfigurasi sprite secara dinamis. Cara mengubahnya pada dasarnya sama.

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

Di lapangan, siapkan sprite, objek yang akan diubah, dan sprite yang akan menjadi gambar setelah perubahan.

GameObject Anda dapat melihat bahwa Anda dapat mengatur objek target dari hierarki. Sprite Ini mungkin pertanyaan tentang apa yang harus diatur .

Untuk ini, saya pikir "jenis tekstur" dari file gambar yang ditambahkan ke proyek adalah "Sprite (2D dan UI)" secara default, sehingga dapat secara otomatis diperlakukan sebagai sprite. Jadi Anda dapat memperlakukannya sebagai sprite hanya dengan mengatur file gambar.

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

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

OnClick Metode ini diharapkan akan dipanggil ketika tombol diklik. Nama metode sewenang-wenang.

OnClick Dalam metode ini, kami mengganti gambar. Karena adalah salah satu yang memiliki SpriteRenderer informasi gambar, kita mendapatkan komponen dari SpriteRenderer GameObject. SpriteRenderer Kelas memiliki properti di mana Anda dapat menukar gambar dengan mengaturnya ke sprite yang memiliki sprite gambar baru.

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

// 省略

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

Setelah Anda menyimpan skrip, lampirkan ke objek. Objek yang akan dilampirkan adalah opsional, tetapi dalam hal EventSystem ini , itu dilampirkan ke . Karena ada "Target Sprite" dan "Next Sprite" sebagai parameter, "Target Sprite" memiliki objek sprite dari hierarki, "Next Sprite" diatur ke file gambar yang diubah dari proyek.

Tentukan metode dari OnClick skrip yang dilampirkan ke peristiwa EventSystem klik tombol .

Jalankan game dan coba tekan tombol. Jika gambar berubah, itu sukses.