A sprite-kép módosítása a játék futása közben

Oldal frissítve :
Oldal létrehozásának dátuma :

Ellenőrzési környezet

Windows
  • Windows 11 esetén
Unity-szerkesztő
  • 2020.3.25f1
Bemeneti rendszercsomagok
  • 1.2.0

A tipp előfeltételei

A következő beállítások előre konfigurálva vannak a tippek magyarázatának előfeltételeként.

A sprite képének módosítása

Amint 2D-s játék közben láthatja, gyakran látni fog egy jelenetet, ahol a sprite-ként beállított kép középen vált. Például az ajtó először zárva van, de kinyitásakor nyitott ajtóként jelenik meg.

Ennek eléréséhez két tárgyat, egy zárt ajtót és egy nyitott ajtót készíthet, és megmutathatja vagy elrejtheti őket. Itt megpróbáljuk elérni a sprite képének megváltoztatásával.

Képek hozzáadása és elhelyezése projektben

Ezúttal szüksége van egy képre a változás előtt és egy képre a változás után, ezért kérjük, készítsen kettőt. Itt a UnityTipsUnityTipsChange fájlnév , illetve .

Dobja el a sprite-ot a projektből, és helyezze el. A gombra kattintva a kép megváltozik, ezért helyezze a gombot a felhasználói felületről.

Képmódosítási parancsfájl létrehozása

Hozzon létre egy szkriptet. A név önkényes, de ebben az esetben SpriteChange .

Ezúttal kattintson a gombra, hogy a sprite képe az időzítéskor megváltozzon. A megváltoztatandó sprite is előre be lesz állítva. Ha módosítja, dinamikusan hozhat létre és konfigurálhat sprite-okat. A változtatás módja alapvetően ugyanaz.

A szkript így néz ki:

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

A terepen készítse elő a sprite-ot, a megváltoztatandó objektumot és a sprite-ot, amely a változás után a kép lesz.

GameObject Láthatja, hogy a célobjektumot beállíthatja a hierarchiából. Sprite Lehet, hogy kérdés, hogy mit kell beállítani .

Ehhez úgy gondolom, hogy a projekthez hozzáadott képfájl "textúra típusa" alapértelmezés szerint "Sprite (2D és UI)", így automatikusan sprite-ként kezelhető. Tehát sprite-ként kezelheti, csak a képfájl beállításával.

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

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

OnClick A metódus várhatóan a gombra kattintáskor kerül meghívásra. A metódus neve tetszőleges.

OnClick A módszerben megváltoztatjuk a képet. Mivel az, amelyik rendelkezik a képinformációval SpriteRenderer , az összetevőt a SpriteRenderer GameObject-től kapjuk. SpriteRenderer Az osztálynak van egy tulajdonsága, ahol felcserélheti a képet úgy, hogy egy új rendszerképpel rendelkező sprite sprite-ra állítja.

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

// 省略

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

A parancsfájl mentése után csatolja az objektumhoz. A csatolandó objektum nem kötelező, de ebben az esetben EventSystem , a -hez van csatolva. Mivel paraméterként "Target Sprite" és "Next Sprite" vannak, a "Target Sprite" sprite objektumokkal rendelkezik a hierarchiából, A "Next Sprite" a projekt módosított képfájljára van beállítva.

Adja meg a metódust a gomb kattintási eseményéhez EventSystem csatolt parancsfájlból OnClick .

Futtassa a játékot, és próbálja meg megnyomni a gombot. Ha a kép megváltozik, az sikeres.