Tukar imej sprite semasa permainan sedang berjalan
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-masingUnityTips
UnityTipsChange
.
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.