Cambiar la imagen del sprite mientras se ejecuta el juego
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 UnityTips
UnityTipsChange
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.