Изменение изображения спрайта во время игры
Проверочная среда
- Виндоус
-
- Windows 11
- Редактор Unity
-
- 2020.3.25f1
- Системные пакеты ввода
-
- 1.2.0
Необходимые условия для получения этого совета
Следующие параметры предварительно настроены в качестве предварительного условия для объяснения этих советов.
Об изменении изображения спрайта
Как вы можете видеть, играя в 2D-игру, вы часто увидите сцену, в которой изображение, установленное в виде спрайта, переключается посередине. Например, дверь сначала закрыта, но при ее открытии она отображается как открытая дверь.
Для этого можно подготовить два объекта, закрытую дверь и открытую дверь, и показать или спрятать их. Здесь мы попробуем добиться этого, переключая изображение спрайта.
Добавление и размещение изображений в проекте
На этот раз вам нужно изображение до изменения и изображение после изменения, поэтому, пожалуйста, подготовьте два.
UnityTips
UnityTipsChange
Здесь имя файла , соответственно.
Перетащите спрайт из проекта и разместите его. При нажатии кнопки изображение меняется, поэтому разместите кнопку из пользовательского интерфейса.
Создание сценария смены изображения
Создайте сценарий. Название произвольное, но в данном случае 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
нажатия кнопки.
Запустите игру и попробуйте нажать кнопку. Если имидж меняется, это успех.