Canviar la imatge de l'sprite mentre el joc s'està executant
Entorn de verificació
- Windows
-
- Finestres 11
- Editor d'unitat
-
- 25.3.2020
- Paquets del sistema d'entrada
-
- 1.2.0
Requisits previs per a aquest consell
Els següents paràmetres estan preconfigurats com a requisit previ per a l'explicació d'aquests consells.
Sobre com canviar la imatge d'un personatge
Com podeu veure quan jugueu a un joc en 2D, sovint veureu una escena on la imatge configurada com un personatge canvia al mig. Per exemple, la porta es tanca al principi, però en obrir-la, es mostra com una porta oberta.
Per aconseguir-ho, podeu preparar dos objectes, una porta tancada i una porta oberta, i mostrar-los o amagar-los. Aquí, intentarem aconseguir-ho canviant la imatge del personatge.
Afegir i col·locar imatges en un projecte
Aquesta vegada, necessiteu una imatge abans del canvi i una imatge després del canvi, així que prepareu-ne dues.
Aquí, el nom del UnityTips
UnityTipsChange
fitxer és , respectivament.
Deixeu caure el personatge del projecte i col·loqueu-lo. Quan es fa clic al botó, la imatge canvia, de manera que col·loqueu el botó de la interfície d'usuari.
Creació d'un script de canvi d'imatge
Creeu un script. El nom és arbitrari, però en aquest cas SpriteChange
, és .
Aquesta vegada, feu clic al botó perquè la imatge del personatge canviï al temps. A més, el personatge a canviar s'establirà amb antelació. Si el canvieu, podeu crear i configurar sprites dinàmicament. La manera de canviar-lo és bàsicament la mateixa.
El guió té aquest aspecte:
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;
}
}
Al camp, prepareu el personatge, l'objecte a canviar i el personatge que serà la imatge després del canvi.
GameObject
Podeu veure que podeu definir l'objecte de destinació des de la jerarquia.
Sprite
Pot ser una qüestió de què establir en .
Per això, crec que el "tipus de textura" del fitxer d'imatge afegit al projecte és "Sprite (2D i UI)" per defecte, de manera que es pot tractar automàticament com un sprite. Per tant, podeu tractar-lo com un personatge només configurant el fitxer d'imatge.
<summary>画像を変更するスプライトオブジェクト。</summary>
[SerializeField] private GameObject TargetSprite;
<summary>変更後の画像を持つスプライト。</summary>
[SerializeField] private Sprite NextSprite;
OnClick
S'espera que el mètode es cridi quan es faci clic al botó. El nom del mètode és arbitrari.
OnClick
En el mètode, estem canviant la imatge.
Com que és el que té SpriteRenderer
la informació de la imatge, obtenim el component del SpriteRenderer
GameObject.
SpriteRenderer
La classe té una propietat on podeu intercanviar la imatge configurant-la en un personatge que tingui una sprite
imatge nova.
// 変更対象のオブジェクトが持つ SpriteRenderer を取得
var spriteRenderer = TargetSprite.GetComponent<SpriteRenderer>();
// 省略
// SpriteRenderer の sprite に変更後のスプライトをセット
spriteRenderer.sprite = NextSprite;
Després de desar l'script, adjunta'l a l'objecte. L'objecte a adjuntar és opcional, però en aquest cas EventSystem
, s'adjunta a .
Com que hi ha "Target Sprite" i "Next Sprite" com a paràmetres, "Target Sprite" té objectes sprite de la jerarquia,
"Next Sprite" està definit al fitxer d'imatge canviat del projecte.
Especifiqueu el mètode de l'script adjunt a l'esdeveniment EventSystem
de OnClick
clic del botó .
Executeu el joc i intenteu prémer el botó. Si la imatge canvia, és un èxit.