Ändra sprite-bilden medan spelet körs
Miljö för verifiering
- Windows
-
- Windows 11 (på engelska)
- Unity-redigeraren
-
- 2020.3.25f1
- Paket för indatasystem
-
- 1.2.0
Förutsättningar för det här tipset
Följande inställningar är förkonfigurerade som en förutsättning för förklaringen av dessa tips.
Om att ändra bilden på en sprite
Som du kan se när du spelar ett 2D-spel kommer du ofta att se en scen där bilden som är inställd som en sprite växlar i mitten. Till exempel stängs dörren först, men genom att öppna den visas den som en öppen dörr.
För att uppnå detta kan du förbereda två föremål, en stängd dörr och en öppen dörr, och visa eller dölja dem. Här kommer vi att försöka uppnå det genom att byta bild på sprajten.
Lägga till och montera bilder i ett projekt
Den här gången behöver du en bild före ändringen och en bild efter ändringen, så förbered två.
UnityTips
UnityTipsChange
Här är filnamnet , respektive.
Ta bort sprajten från projektet och placera den. När du klickar på knappen ändras bilden, så placera knappen från användargränssnittet.
Skapa ett skript för bildändring
Skapa ett skript. Namnet är godtyckligt, men i det här fallet SpriteChange
är det .
Den här gången klickar du på knappen så att bilden av sprajten ändras vid tidpunkten. Dessutom kommer spriten som ska ändras att ställas in i förväg. Om du ändrar det kan du skapa och konfigurera sprites dynamiskt. Sättet att ändra det är i princip detsamma.
Skriptet ser ut så här:
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;
}
}
I fältet förbereder du sprajten, objektet som ska ändras och spriten som ska vara bilden efter ändringen.
GameObject
Du kan se att du kan ange målobjektet från hierarkin.
Sprite
Det kan vara en fråga om vad man ska sätta in.
För detta tror jag att "texturtypen" för bildfilen som läggs till i projektet är "Sprite (2D och UI)" som standard, så den kan automatiskt behandlas som en sprite. Så du kan behandla den som en sprite bara genom att ställa in bildfilen.
<summary>画像を変更するスプライトオブジェクト。</summary>
[SerializeField] private GameObject TargetSprite;
<summary>変更後の画像を持つスプライト。</summary>
[SerializeField] private Sprite NextSprite;
OnClick
Metoden förväntas anropas när du klickar på knappen. Metodnamnet är godtyckligt.
OnClick
I metoden byter vi bild.
Eftersom är den som har SpriteRenderer
bildinformationen hämtar vi komponenten från SpriteRenderer
GameObject.
SpriteRenderer
Klassen har en egenskap där du kan byta bild genom att ställa in den på en sprite som har en sprite
ny bild.
// 変更対象のオブジェクトが持つ SpriteRenderer を取得
var spriteRenderer = TargetSprite.GetComponent<SpriteRenderer>();
// 省略
// SpriteRenderer の sprite に変更後のスプライトをセット
spriteRenderer.sprite = NextSprite;
När du har sparat skriptet bifogar du det till objektet. Objektet som ska bifogas är valfritt, men i det här fallet EventSystem
är det kopplat till .
Eftersom det finns "Target Sprite" och "Next Sprite" som parametrar, har "Target Sprite" sprite-objekt från hierarkin,
"Next Sprite" är inställd på den ändrade bildfilen från projektet.
Ange metoden från OnClick
skriptet som är kopplat till knappens click-händelse EventSystem
.
Kör spelet och försök att trycka på knappen. Om bilden förändras är det en framgång.