Промяна на изображението на спрайт, докато играта се изпълнява

Страницата се актуализира :
Дата на създаване на страница :

Среда за проверка

Уиндоус
  • Прозорци 11
Редактор на единство
  • 2020.3.25ф1
Пакети на входната система
  • 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 и 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" има sprite обекти от йерархията, "Next Sprite" е настроен на променения файл с изображение от проекта.

Задайте метода от OnClick скрипта, прикачен към събитието EventSystem за щракване на бутона .

Стартирайте играта и се опитайте да натиснете бутона. Ако изображението се промени, това е успех.