Wijzig de sprite-afbeelding terwijl het spel draait

Pagina bijgewerkt :
Aanmaakdatum van pagina :

Verificatie omgeving

Ramen
  • Vensters 11
Unity-editor
  • 2020.3.25f1
Pakketten met invoersystemen
  • 1.2.0

Vereisten voor deze tip

De volgende instellingen zijn vooraf geconfigureerd als voorwaarde voor de uitleg van deze tips.

Over het wijzigen van de afbeelding van een sprite

Zoals je kunt zien bij het spelen van een 2D-game, zie je vaak een scène waarin het beeld dat is ingesteld als een sprite in het midden schakelt. De deur wordt bijvoorbeeld eerst gesloten, maar door deze te openen, wordt deze weergegeven als een open deur.

Om dit te bereiken, kunt u twee objecten voorbereiden, een gesloten deur en een open deur, en deze laten zien of verbergen. Hier zullen we proberen dit te bereiken door het beeld van de sprite te veranderen.

Afbeeldingen toevoegen en plaatsen in een project

Deze keer heb je een afbeelding nodig voor de wijziging en een afbeelding na de wijziging, dus bereid er twee voor. Hier is de UnityTipsUnityTipsChange bestandsnaam respectievelijk .

Laat de sprite uit het project vallen en plaats deze. Wanneer op de knop wordt geklikt, verandert de afbeelding, dus plaats de knop vanuit de gebruikersinterface.

Een script voor het wijzigen van afbeeldingen maken

Maak een script. De naam is willekeurig, maar in dit geval SpriteChange is het .

Klik deze keer op de knop zodat de afbeelding van de sprite op het moment verandert. Ook wordt de te wijzigen sprite van tevoren ingesteld. Als je het wijzigt, kun je sprites dynamisch maken en configureren. De manier om het te veranderen is in principe hetzelfde.

Het script ziet er als volgt uit:

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

Bereid in het veld de sprite voor, het object dat moet worden gewijzigd en de sprite die de afbeelding zal zijn na de wijziging.

GameObject U kunt zien dat u het doelobject vanuit de hiërarchie kunt instellen. Sprite Het kan een kwestie zijn van wat in te stellen .

Hiervoor denk ik dat het "textuurtype" van het afbeeldingsbestand dat aan het project wordt toegevoegd standaard "Sprite (2D en UI)" is, dus het kan automatisch worden behandeld als een sprite. Je kunt het dus als een sprite behandelen door gewoon het afbeeldingsbestand in te stellen.

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

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

OnClick De methode wordt naar verwachting aangeroepen wanneer op de knop wordt geklikt. De naam van de methode is willekeurig.

OnClick In de methode wisselen we het beeld. Omdat degene is die de afbeeldingsinformatie heeft SpriteRenderer , krijgen we de component van het SpriteRenderer GameObject. SpriteRenderer De klasse heeft een eigenschap waar je de afbeelding kunt verwisselen door deze in te stellen op een sprite die een sprite nieuwe afbeelding heeft.

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

// 省略

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

Nadat u het script hebt opgeslagen, koppelt u het aan het object. Het te bevestigen object is optioneel, maar in dit geval EventSystem is het bevestigd aan . Aangezien er "Target Sprite" en "Next Sprite" als parameters zijn, heeft "Target Sprite" sprite-objecten uit de hiërarchie, "Volgende Sprite" is ingesteld op het gewijzigde afbeeldingsbestand van het project.

Geef de methode op uit OnClick het script dat is gekoppeld aan de klikgebeurtenis EventSystem van de knop.

Start het spel en probeer op de knop te drukken. Als het beeld verandert, is het een succes.