在遊戲運行時更改精靈圖像

更新頁 :
頁面創建日期 :

驗證環境

窗戶
  • 窗戶11
Unity 編輯器
  • 2020.3.25f1
輸入系統包
  • 1.2.0

此提示的先決條件

以下設置已預先配置為解釋這些提示的先決條件。

關於更改精靈的圖像

正如您在玩 2D 遊戲時所看到的,您經常會看到一個場景,其中設置為精靈的圖像在中間切換。 例如,門一開始是關閉的,但打開它后,它顯示為打開的門。

為此,您可以準備兩個物件,一個關閉的門和一個打開的門,並顯示或隱藏它們。 在這裡,我們將嘗試通過切換精靈的圖像來實現它。

在專案中添加和置入圖像

這一次,您需要更改前的圖像和更改后的圖像,因此請準備兩個。 此處,UnityTipsUnityTipsChange檔案名分別為 。

從專案中刪除Sprite並放置它。 按兩下該按鈕時,圖像會發生變化,因此請從UI中放置按鈕。

創建圖像更改文稿

創建腳本。 名稱是任意的,但在本例 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)”,因此可以自動將其視為 Sprite。 因此,您只需設置圖像檔即可將其視為精靈。

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

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

OnClick 按兩下按鈕時應調用該方法。 方法名稱是任意的。

OnClick 在該方法中,我們正在切換圖像。 由於是具有 SpriteRenderer 圖像資訊的元件,因此我們從遊戲對象中獲取元件 SpriteRendererSpriteRenderer 該類具有一個屬性,您可以在其中通過將圖像設置為具有 sprite 新圖像的精靈來交換圖像。

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

// 省略

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

保存文稿后,將其附加到物件。 要附加的物件是可選的,但在本例 EventSystem 中,它被附加到 。 由於有「Target Sprite」和「Next Sprite」作為參數,因此「Target Sprite」具有層次結構中的Sprite物件, “Next Sprite”設置為專案中更改的圖像檔。

從附加到按鈕的 click 事件 EventSystem 的腳本中 OnClick 指定方法。

運行遊戲並嘗試按下按鈕。 如果圖像發生變化,則表示成功。