Pakeiskite "sprite" vaizdą, kol žaidimas veikia

Puslapis atnaujintas :
Puslapio sukūrimo data :

Tikrinimo aplinka

Windows
  • Langai 11
"Unity" redaktorius
  • 2020.3.25f1
Įvesties sistemos paketai
  • 1.2.0

Būtinos šio patarimo sąlygos

Toliau nurodyti parametrai yra iš anksto sukonfigūruoti kaip būtina šių patarimų paaiškinimo sąlyga.

Apie "sprite" įvaizdžio keitimą

Kaip matote žaisdami 2D žaidimą, dažnai pamatysite sceną, kurioje vaizdas, nustatytas kaip "sprite", persijungia viduryje. Pavyzdžiui, durys iš pradžių uždaromos, tačiau jas atidarius, jos rodomos kaip atviros durys.

Norėdami tai pasiekti, galite paruošti du objektus, uždarytas duris ir atviras duris ir parodyti arba paslėpti. Čia mes stengsimės tai pasiekti perjungdami "sprite" vaizdą.

Vaizdų pridėjimas ir įdėjimas į projektą

Šį kartą jums reikia vaizdo prieš pakeitimą ir vaizdo po pakeitimo, todėl paruoškite du. UnityTipsUnityTipsChange Čia failo pavadinimas yra , atitinkamai.

Išmeskite sprite iš projekto ir padėkite jį. Spustelėjus mygtuką, vaizdas pasikeičia, todėl įdėkite mygtuką iš vartotojo sąsajos.

Vaizdo keitimo scenarijaus kūrimas

Sukurkite scenarijų. Pavadinimas yra savavališkas, bet šiuo atveju SpriteChange , tai yra .

Šį kartą spustelėkite mygtuką, kad sprite vaizdas pasikeistų laiku. Be to, keičiamas sprite bus nustatytas iš anksto. Jei jį pakeisite, galėsite dinamiškai kurti ir konfigūruoti spritus. Būdas jį pakeisti iš esmės yra tas pats.

Scenarijus atrodo taip:

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

Lauke paruoškite "sprite", keičiamą objektą ir "sprite", kuris bus vaizdas po pakeitimo.

GameObject Matote, kad galite nustatyti tikslinį objektą iš hierarchijos. Sprite Tai gali būti klausimas, ką nustatyti .

Dėl to manau, kad prie projekto pridėto vaizdo failo "tekstūros tipas" pagal numatytuosius nustatymus yra "Sprite (2D ir UI)", todėl jį galima automatiškai traktuoti kaip "sprite". Taigi galite jį traktuoti kaip "sprite" tiesiog nustatydami vaizdo failą.

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

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

OnClick Tikimasi, kad metodas bus iškviestas spustelėjus mygtuką. Metodo pavadinimas yra savavališkas.

OnClick Taikydami šį metodą, mes perjungiame vaizdą. Kadangi yra tas, kuris turi SpriteRenderer vaizdo informaciją, komponentą gauname iš SpriteRenderer GameObject. SpriteRenderer Klasė turi savybę, kurioje galite pakeisti vaizdą nustatydami jį į sprite, kuriame yra sprite naujas vaizdas.

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

// 省略

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

Įrašę scenarijų, pridėkite jį prie objekto. Pridedamas objektas yra neprivalomas, tačiau šiuo atveju EventSystem jis pridedamas prie . Kadangi kaip parametrai yra "Target Sprite" ir "Next Sprite", "Target Sprite" turi sprite objektus iš hierarchijos, "Kitas Sprite" nustatomas į pakeistą vaizdo failą iš projekto.

Nurodykite metodą iš OnClick scenarijaus, pridėto prie mygtuko paspaudimo įvykio EventSystem .

Paleiskite žaidimą ir pabandykite paspausti mygtuką. Jei vaizdas pasikeičia, tai yra sėkmė.