Ändra sprite-bilden medan spelet körs

Sidan uppdaterad :
Datum för skapande av sida :

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å. UnityTipsUnityTipsChange 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.