Alterar a imagem do sprite enquanto o jogo está em execução
Ambiente de verificação
- Windows
-
- Janelas 11
- Unity Editor
-
- 25.3.2020F1
- Pacotes do sistema de entrada
-
- 1.2.0
Pré-requisitos para esta dica
As configurações a seguir são pré-configuradas como um pré-requisito para a explicação dessas dicas.
Sobre a alteração da imagem de um sprite
Como você pode ver ao jogar um jogo 2D, muitas vezes você verá uma cena em que a imagem definida como um sprite alterna no meio. Por exemplo, a porta é fechada no início, mas ao abri-la, ela é exibida como uma porta aberta.
Para conseguir isso, você pode preparar dois objetos, uma porta fechada e uma porta aberta, e mostrá-los ou escondê-los. Aqui, tentaremos alcançá-lo mudando a imagem do sprite.
Adicionando e colocando imagens em um projeto
Desta vez, você precisa de uma imagem antes da mudança e uma imagem após a alteração, então prepare duas.
Aqui, o nome do UnityTips
UnityTipsChange
arquivo é , respectivamente.
Solte o sprite do projeto e coloque-o. Quando o botão é clicado, a imagem muda, então coloque o botão na interface do usuário.
Criando um script de alteração de imagem
Crie um script. O nome é arbitrário, mas neste caso SpriteChange
, é.
Desta vez, clique no botão para que a imagem do sprite mude no momento. Além disso, o sprite a ser alterado será definido com antecedência. Se você alterá-lo, poderá criar e configurar sprites dinamicamente. A maneira de mudá-lo é basicamente a mesma.
O script tem a seguinte aparência:
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;
}
}
No campo, prepare o sprite, o objeto a ser alterado e o sprite que será a imagem após a alteração.
GameObject
Você pode ver que pode definir o objeto de destino a partir da hierarquia.
Sprite
Pode ser uma questão do que colocar em .
Para isso, acho que o "tipo de textura" do arquivo de imagem adicionado ao projeto é "Sprite (2D e UI)" por padrão, para que possa ser tratado automaticamente como um sprite. Assim, você pode tratá-lo como um sprite apenas definindo o arquivo de imagem.
<summary>画像を変更するスプライトオブジェクト。</summary>
[SerializeField] private GameObject TargetSprite;
<summary>変更後の画像を持つスプライト。</summary>
[SerializeField] private Sprite NextSprite;
OnClick
Espera-se que o método seja chamado quando o botão for clicado. O nome do método é arbitrário.
OnClick
No método, estamos trocando a imagem.
Como é aquele que tem SpriteRenderer
as informações da imagem, obtemos o SpriteRenderer
componente do GameObject.
SpriteRenderer
A classe tem uma propriedade onde você pode trocar a imagem definindo-a para um sprite que tem uma sprite
nova imagem.
// 変更対象のオブジェクトが持つ SpriteRenderer を取得
var spriteRenderer = TargetSprite.GetComponent<SpriteRenderer>();
// 省略
// SpriteRenderer の sprite に変更後のスプライトをセット
spriteRenderer.sprite = NextSprite;
Depois de salvar o script, anexe-o ao objeto. O objeto a ser anexado é opcional, mas, neste caso EventSystem
, ele é anexado ao .
Como existem "Target Sprite" e "Next Sprite" como parâmetros, "Target Sprite" tem objetos sprite da hierarquia,
"Next Sprite" é definido como o arquivo de imagem alterado do projeto.
Especifique o método do script anexado OnClick
ao evento EventSystem
click do botão.
Execute o jogo e tente pressionar o botão. Se a imagem mudar, é um sucesso.