Alterar a imagem do sprite enquanto o jogo está em execução

Página atualizada :
Data de criação de página :

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