A sprite-kép módosítása a játék futása közben
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 UnityTips
UnityTipsChange
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.