Изменение изображения спрайта во время игры

Страница обновлена :
Дата создания страницы :

Проверочная среда

Виндоус
  • Windows 11
Редактор Unity
  • 2020.3.25f1
Системные пакеты ввода
  • 1.2.0

Необходимые условия для получения этого совета

Следующие параметры предварительно настроены в качестве предварительного условия для объяснения этих советов.

Об изменении изображения спрайта

Как вы можете видеть, играя в 2D-игру, вы часто увидите сцену, в которой изображение, установленное в виде спрайта, переключается посередине. Например, дверь сначала закрыта, но при ее открытии она отображается как открытая дверь.

Для этого можно подготовить два объекта, закрытую дверь и открытую дверь, и показать или спрятать их. Здесь мы попробуем добиться этого, переключая изображение спрайта.

Добавление и размещение изображений в проекте

На этот раз вам нужно изображение до изменения и изображение после изменения, поэтому, пожалуйста, подготовьте два. UnityTipsUnityTipsChange Здесь имя файла , соответственно.

Перетащите спрайт из проекта и разместите его. При нажатии кнопки изображение меняется, поэтому разместите кнопку из пользовательского интерфейса.

Создание сценария смены изображения

Создайте сценарий. Название произвольное, но в данном случае SpriteChange это .

На этот раз нажмите кнопку, чтобы изображение спрайта изменилось по таймингу. Кроме того, спрайт, который будет изменен, будет установлен заранее. Если вы измените его, вы сможете создавать и настраивать спрайты динамически. Способ его изменения в принципе один и тот же.

Скрипт выглядит следующим образом:

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

В поле подготовьте спрайт, объект, который нужно изменить, и спрайт, который будет изображением после изменения.

GameObject Вы можете видеть, что целевой объект можно задать из иерархии. Sprite Это может быть вопрос о том, что установить.

Для этого я думаю, что "тип текстуры" файла изображения, добавленного в проект, по умолчанию "Sprite (2D and UI)", поэтому он может автоматически рассматриваться как спрайт. Таким образом, вы можете рассматривать его как спрайт, просто установив файл изображения.

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

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

OnClick Ожидается, что метод будет вызываться при нажатии кнопки. Имя метода произвольное.

OnClick В методе мы переключаем изображение. Так как это тот, который содержит SpriteRenderer информацию об изображении, мы получаем компонент из SpriteRenderer GameObject. SpriteRenderer У класса есть свойство, в котором вы можете поменять местами изображение, установив для него спрайт с новым изображением sprite .

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

// 省略

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

После того, как вы сохраните сценарий, прикрепите его к объекту. Присоединяемый объект является необязательным, но в данном случае EventSystem он присоединяется к . Так как в качестве параметров есть "Target Sprite" и "Next Sprite", то "Target Sprite" имеет объекты спрайтов из иерархии, "Next Sprite" устанавливается на измененный файл изображения из проекта.

Укажите метод из OnClick скрипта, прикрепленного к событию EventSystem нажатия кнопки.

Запустите игру и попробуйте нажать кнопку. Если имидж меняется, это успех.