Sprite-kuvan vaihtaminen pelin ollessa käynnissä

Sivu päivitetty :
Sivun luontipäivämäärä :

Varmennusympäristö

Windows
  • Windows 11
Unity-editori
  • 2020.3.25F1
Syöttöjärjestelmän paketit
  • 1.2.0

Tämän vinkin edellytykset

Seuraavat asetukset on määritetty valmiiksi näiden vihjeiden selityksen edellytykseksi.

Tietoja spriten kuvan muuttamisesta

Kuten näet pelatessasi 2D-peliä, näet usein kohtauksen, jossa sprite-kuvaksi asetettu kuva vaihtuu keskellä. Esimerkiksi ovi suljetaan aluksi, mutta avaamalla se näkyy avoimena ovena.

Tämän saavuttamiseksi voit valmistaa kaksi esinettä, suljetun oven ja avoimen oven, ja näyttää tai piilottaa ne. Tässä yritämme saavuttaa sen vaihtamalla spriten kuvaa.

Kuvien lisääminen ja sijoittaminen projektiin

Tällä kertaa tarvitset kuvan ennen muutosta ja kuvan muutoksen jälkeen, joten valmistele kaksi. UnityTipsUnityTipsChange Tässä tiedostonimi on , vastaavasti.

Pudota sprite projektista ja aseta se. Kun painiketta napsautetaan, kuva muuttuu, joten aseta painike käyttöliittymästä.

Kuvanvaihtoskriptin luominen

Luo komentosarja. Nimi on mielivaltainen, mutta tässä tapauksessa SpriteChange se on .

Napsauta tällä kertaa painiketta, jotta spriten kuva muuttuu ajoituksen mukaan. Myös vaihdettava sprite asetetaan etukäteen. Jos muutat sitä, voit luoda ja määrittää spritejä dynaamisesti. Tapa muuttaa sitä on periaatteessa sama.

Skripti näyttää tältä:

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

Valmistele kentässä sprite, muutettava objekti ja sprite, joka on kuva muutoksen jälkeen.

GameObject Näet, että voit määrittää kohdeobjektin hierarkiasta. Sprite Kyse voi olla siitä, mitä asettaa .

Tätä varten mielestäni projektiin lisätyn kuvatiedoston "tekstuurityyppi" on oletuksena "Sprite (2D ja UI)", joten sitä voidaan käsitellä automaattisesti spritenä. Joten voit käsitellä sitä spritenä vain asettamalla kuvatiedoston.

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

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

OnClick Menetelmän odotetaan kutsuvan, kun painiketta napsautetaan. Menetelmän nimi on mielivaltainen.

OnClick Menetelmässä vaihdamme kuvaa. Koska on se, jolla on SpriteRenderer kuvatiedot, saamme komponentin GameObjectista SpriteRenderer . SpriteRenderer Luokalla on ominaisuus, jossa voit vaihtaa kuvan asettamalla sen hahmoksi, jolla on sprite uusi kuva.

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

// 省略

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

Kun olet tallentanut komentosarjan, liitä se objektiin. Liitettävä objekti on valinnainen, mutta tässä tapauksessa EventSystem se liitetään . Koska parametreina on "Target Sprite" ja "Next Sprite", "Target Sprite" sisältää sprite-objekteja hierarkiasta, "Seuraava Sprite" on asetettu projektin muuttuneeseen kuvatiedostoon.

Määritä menetelmä painikkeen napsautustapahtumaan EventSystem liitetystä komentosarjasta OnClick .

Suorita peli ja yritä painaa painiketta. Jos kuva muuttuu, se on menestys.