Schimbați imaginea sprite-ului în timp ce jocul rulează
Mediul de verificare
- Windows
-
- Ferestre 11
- Unity Editor
-
- 2020.3.25F1
- Pachete de sisteme de intrare
-
- 1.2.0
Cerințe preliminare pentru acest sfat
Următoarele setări sunt preconfigurate ca o condiție prealabilă pentru explicarea acestor sfaturi.
Despre schimbarea imaginii unui personaj
După cum puteți vedea atunci când jucați un joc 2D, veți vedea adesea o scenă în care imaginea setată ca sprite se schimbă în mijloc. De exemplu, ușa este închisă la început, dar deschizând-o, este afișată ca o ușă deschisă.
Pentru a realiza acest lucru, puteți pregăti două obiecte, o ușă închisă și o ușă deschisă și le puteți arăta sau ascunde. Aici, vom încerca să o realizăm schimbând imaginea sprite-ului.
Adăugarea și plasarea imaginilor într-un proiect
De data aceasta, aveți nevoie de o imagine înainte de schimbare și de o imagine după schimbare, așa că vă rugăm să pregătiți două.
Aici, numele fișierului UnityTips
UnityTipsChange
este , respectiv.
Aruncați personajul din proiect și plasați-l. Când se face clic pe buton, imaginea se schimbă, deci plasați butonul din interfața de utilizare.
Crearea unui script de modificare a imaginii
Creați un script. Numele este arbitrar, dar în acest caz SpriteChange
, este .
De data aceasta, faceți clic pe buton, astfel încât imaginea personajului să se schimbe la momentul respectiv. De asemenea, personajul care urmează să fie schimbat va fi stabilit în avans. Dacă îl schimbi, poți crea și configura personaje în mod dinamic. Modul de a o schimba este în esență același.
Scenariul arată astfel:
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;
}
}
În câmp, pregătiți sprite-ul, obiectul care urmează să fie schimbat și sprite-ul care va fi imaginea după schimbare.
GameObject
Puteți vedea că puteți seta obiectul țintă din ierarhie.
Sprite
Poate fi o întrebare despre ce să setați .
Pentru aceasta, cred că "tipul de textură" al fișierului imagine adăugat la proiect este "Sprite (2D și UI)" în mod implicit, deci poate fi tratat automat ca un sprite. Deci, îl puteți trata ca pe un sprite doar setând fișierul imagine.
<summary>画像を変更するスプライトオブジェクト。</summary>
[SerializeField] private GameObject TargetSprite;
<summary>変更後の画像を持つスプライト。</summary>
[SerializeField] private Sprite NextSprite;
OnClick
Metoda este de așteptat să fie apelată atunci când se face clic pe buton. Numele metodei este arbitrar.
OnClick
În metodă, schimbăm imaginea.
Deoarece este cel care are SpriteRenderer
informațiile despre imagine, obținem componenta din SpriteRenderer
GameObject.
SpriteRenderer
Clasa are o proprietate în care puteți schimba imaginea setând-o la un personaj care are o sprite
imagine nouă.
// 変更対象のオブジェクトが持つ SpriteRenderer を取得
var spriteRenderer = TargetSprite.GetComponent<SpriteRenderer>();
// 省略
// SpriteRenderer の sprite に変更後のスプライトをセット
spriteRenderer.sprite = NextSprite;
După ce salvați scriptul, atașați-l la obiect. Obiectul care trebuie atașat este opțional, dar în acest caz EventSystem
, este atașat la .
Deoarece există "Target Sprite" și "Next Sprite" ca parametri, "Target Sprite" are obiecte sprite din ierarhie,
"Next Sprite" este setat la fișierul imagine modificat din proiect.
Specificați metoda din OnClick
scriptul atașat la evenimentul EventSystem
de clic al butonului .
Rulați jocul și încercați să apăsați butonul. Dacă imaginea se schimbă, este un succes.