Skift sprite-billedet, mens spillet kører

Side opdateret :
Dato for oprettelse af side :

Miljø til bekræftelse

Windows
  • Windows 11
Enhedslistens redaktør
  • 2020.3.25f1
Input System Pakker
  • 1.2.0

Forudsætninger for dette tip

Følgende indstillinger er forudkonfigureret som en forudsætning for forklaringen af disse tip.

Om ændring af billedet af en sprite

Som du kan se, når du spiller et 2D-spil, vil du ofte se en scene, hvor billedet indstillet som en sprite skifter i midten. For eksempel lukkes døren først, men ved at åbne den vises den som en åben dør.

For at opnå dette kan du forberede to objekter, en lukket dør og en åben dør, og vise eller skjule dem. Her vil vi forsøge at opnå det ved at skifte billedet af sprite.

Tilføje og placere billeder i et projekt

Denne gang har du brug for et billede før ændringen og et billede efter ændringen, så forbered venligst to. Her er filnavnet UnityTipsUnityTipsChange henholdsvis .

Slip spriten fra projektet, og placer den. Når der klikkes på knappen, ændres billedet, så placer knappen fra brugergrænsefladen.

Oprettelse af et billedændringsscript

Opret et script. Navnet er vilkårligt, men i dette tilfælde SpriteChange er det .

Denne gang skal du klikke på knappen, så billedet af sprite ændres på tidspunktet. Den sprite, der skal ændres, indstilles også på forhånd. Hvis du ændrer det, kan du oprette og konfigurere sprites dynamisk. Måden at ændre det på er stort set den samme.

Scriptet ser sådan ud:

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 marken skal du forberede sprite, objektet, der skal ændres, og sprite, der vil være billedet efter ændringen.

GameObject Du kan se, at du kan indstille målobjektet fra hierarkiet. Sprite Det kan være et spørgsmål om, hvad man skal sætte ind .

Til dette tror jeg, at "teksturtypen" af billedfilen, der er tilføjet til projektet, som standard er "Sprite (2D og UI)", så den automatisk kan behandles som en sprite. Så du kan behandle det som en sprite bare ved at indstille billedfilen.

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

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

OnClick Metoden forventes at blive kaldt, når der klikkes på knappen. Metodenavnet er vilkårligt.

OnClick I metoden skifter vi billedet. Da er den, der har SpriteRenderer billedoplysningerne, får vi komponenten fra SpriteRenderer GameObject. SpriteRenderer Klassen har en egenskab, hvor du kan bytte billedet ved at indstille det til en sprite, der har et sprite nyt billede.

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

// 省略

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

Når du har gemt scriptet, skal du vedhæfte det til objektet. Objektet, der skal vedhæftes, er valgfrit, men i dette tilfælde EventSystem er det knyttet til . Da der er "Target Sprite" og "Next Sprite" som parametre, har "Target Sprite" sprite-objekter fra hierarkiet, "Next Sprite" er indstillet til den ændrede billedfil fra projektet.

Angiv metoden fra OnClick det script, der er knyttet til knappens klikhændelse EventSystem .

Kør spillet og prøv at trykke på knappen. Hvis billedet ændrer sig, er det en succes.