Canviar la imatge de l'sprite mentre el joc s'està executant

Pàgina actualitzada :
Data de creació de la pàgina :

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 UnityTipsUnityTipsChange 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.