Changer l’image du sprite pendant que le jeu est en cours d’exécution

Page mise à jour :
Date de création de la page :

Environnement de vérification

Windows
  • Fenêtres 11
Éditeur Unity
  • 2020.3.25f1
Packages du système d’entrée
  • 1.2.0

Conditions préalables à cette astuce

Les paramètres suivants sont préconfigurés comme condition préalable à l’explication de ces conseils.

À propos de la modification de l’image d’un sprite

Comme vous pouvez le voir lorsque vous jouez à un jeu en 2D, vous verrez souvent une scène où l’image définie sous forme de sprite bascule au milieu. Par exemple, la porte est d’abord fermée, mais en l’ouvrant, elle s’affiche comme une porte ouverte.

Pour ce faire, vous pouvez préparer deux objets, une porte fermée et une porte ouverte, et les montrer ou les masquer. Ici, nous allons essayer d’y parvenir en inversant l’image du sprite.

Ajout et placement d’images dans un projet

Cette fois-ci, vous avez besoin d’une image avant le changement et d’une image après le changement, alors préparez-en deux. Ici, le nom du UnityTipsUnityTipsChange fichier est , respectivement.

Déposez le sprite du projet et placez-le. Lorsque vous cliquez sur le bouton, l’image change, alors placez le bouton à partir de l’interface utilisateur.

Création d’un script de changement d’image

Créez un script. Le nom est arbitraire, mais dans ce cas SpriteChange , c’est .

Cette fois, cliquez sur le bouton pour que l’image du sprite change au moment où elle se produit. De plus, le sprite à modifier sera défini à l’avance. Si vous le modifiez, vous pouvez créer et configurer des sprites dynamiquement. La façon de le changer est fondamentalement la même.

Le script ressemble à ceci :

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

Dans le champ, préparez le sprite, l’objet à modifier et le sprite qui sera l’image après le changement.

GameObject Vous pouvez voir que vous pouvez définir l’objet cible à partir de la hiérarchie. Sprite Il peut s’agir de savoir ce qu’il faut mettre dans .

Pour cela, je pense que le « type de texture » du fichier image ajouté au projet est « Sprite (2D et UI) » par défaut, il peut donc être automatiquement traité comme un sprite. Vous pouvez donc le traiter comme un sprite simplement en définissant le fichier image.

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

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

OnClick La méthode est censée être appelée lorsque l’on clique sur le bouton. Le nom de la méthode est arbitraire.

OnClick Dans la méthode, nous changeons l’image. Puisque est celui qui contient SpriteRenderer les informations d’image, nous obtenons le composant à partir du SpriteRenderer GameObject. SpriteRenderer La classe a une propriété où vous pouvez permuter l’image en la définissant sur un sprite qui a une sprite nouvelle image.

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

// 省略

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

Après avoir enregistré le script, attachez-le à l’objet. L’objet à attacher est facultatif, mais dans ce cas EventSystem , il est attaché à . Puisqu’il y a « Target Sprite » et « Next Sprite » en tant que paramètres, « Target Sprite » a des objets sprite de la hiérarchie, « Next Sprite » est défini sur le fichier image modifié du projet.

Spécifiez la méthode à partir du OnClick script attaché à l’événement EventSystem de clic du bouton .

Lancez le jeu et essayez d’appuyer sur le bouton. Si l’image change, c’est un succès.