Cambiar la imagen del sprite mientras se ejecuta el juego

Actualización de la página :
Fecha de creación de la página :

Entorno de verificación

Windows
  • Windows 11
Unity Editor
  • 2020.3.25f1
Paquetes del sistema de entrada
  • 1.2.0

Requisitos previos para esta sugerencia

Los siguientes ajustes están preconfigurados como requisito previo para la explicación de estos consejos.

Acerca de cambiar la imagen de un sprite

Como puedes ver cuando juegas un juego en 2D, a menudo verás una escena en la que la imagen establecida como un sprite cambia en el medio. Por ejemplo, la puerta está cerrada al principio, pero al abrirla, se muestra como una puerta abierta.

Para lograrlo, puedes preparar dos objetos, una puerta cerrada y una puerta abierta, y mostrarlos u ocultarlos. Aquí, intentaremos lograrlo cambiando la imagen del sprite.

Adición y colocación de imágenes en un proyecto

Esta vez, necesita una imagen antes del cambio y una imagen después del cambio, así que prepare dos. Aquí, el nombre del UnityTipsUnityTipsChange archivo es , respectivamente.

Suelta el sprite del proyecto y colócalo. Cuando se hace clic en el botón, la imagen cambia, así que coloque el botón desde la interfaz de usuario.

Creación de un script de cambio de imagen

Cree un script. El nombre es arbitrario, pero en este caso SpriteChange , es .

Esta vez, haga clic en el botón para que la imagen del sprite cambie en el momento. Además, el sprite que se va a cambiar se establecerá de antemano. Si lo cambias, puedes crear y configurar sprites dinámicamente. La forma de cambiarlo es básicamente la misma.

El script tiene el siguiente aspecto:

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

En el campo, prepare el sprite, el objeto que se va a cambiar y el sprite que será la imagen después del cambio.

GameObject Puede ver que puede establecer el objeto de destino desde la jerarquía. Sprite Puede ser una cuestión de qué establecer en .

Para ello, creo que el "tipo de textura" del archivo de imagen añadido al proyecto es "Sprite (2D y UI)" por defecto, por lo que puede ser tratado automáticamente como un sprite. Por lo tanto, puede tratarlo como un sprite simplemente configurando el archivo de imagen.

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

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

OnClick Se espera que se llame al método cuando se haga clic en el botón. El nombre del método es arbitrario.

OnClick En el método, estamos cambiando la imagen. Dado que es el que tiene SpriteRenderer la información de la imagen, obtenemos el componente del SpriteRenderer GameObject. SpriteRenderer La clase tiene una propiedad en la que puede intercambiar la imagen configurándola en un sprite que tenga una sprite nueva imagen.

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

// 省略

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

Después de guardar el script, adjúntelo al objeto. El objeto que se va a adjuntar es opcional, pero en este caso EventSystem , se adjunta a . Dado que hay "Target Sprite" y "Next Sprite" como parámetros, "Target Sprite" tiene objetos sprite de la jerarquía, "Next Sprite" se establece en el archivo de imagen modificado del proyecto.

Especifique el método de la secuencia de comandos adjunta al evento EventSystem de OnClick clic del botón.

Ejecuta el juego e intenta presionar el botón. Si la imagen cambia, es un éxito.