Zmienianie obrazu duszka podczas działania gry
Środowisko weryfikacyjne
- Windows
-
- Okna 11
- Edytor aparatu Unity
-
- 2020.3.25f1
- Pakiety systemu wejściowego
-
- 1.2.0
Wymagania wstępne dotyczące tej porady
Poniższe ustawienia są wstępnie skonfigurowane jako warunek wstępny wyjaśnienia tych wskazówek.
Informacje o zmienianiu obrazu ikonki
Jak widać podczas grania w grę 2D, często zobaczysz scenę, w której obraz ustawiony jako duszek przełącza się pośrodku. Na przykład drzwi są początkowo zamknięte, ale po ich otwarciu są wyświetlane jako drzwi otwarte.
Aby to osiągnąć, możesz przygotować dwa obiekty, zamknięte drzwi i otwarte drzwi, i pokazać je lub ukryć. Tutaj postaramy się to osiągnąć, przełączając obraz duszka.
Dodawanie i umieszczanie obrazów w projekcie
Tym razem potrzebujesz obrazu przed zmianą i obrazu po zmianie, więc przygotuj dwa.
UnityTips
UnityTipsChange
Tutaj nazwa pliku to odpowiednio , .
Upuść duszka z projektu i umieść go. Po kliknięciu przycisku obraz zmienia się, więc umieść przycisk w interfejsie użytkownika.
Tworzenie skryptu zmiany obrazu
Utwórz skrypt. Nazwa jest umowna, ale w tym przypadku SpriteChange
jest to .
Tym razem kliknij przycisk, aby obraz duszka zmienił się w odpowiednim momencie. Również sprite, który ma zostać zmieniony, zostanie ustawiony z wyprzedzeniem. Jeśli go zmienisz, możesz dynamicznie tworzyć i konfigurować sprite'y. Sposób na zmianę jest w zasadzie taki sam.
Skrypt wygląda tak:
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;
}
}
W polu przygotuj duszka, obiekt do zmiany i duszka, który będzie obrazem po zmianie.
GameObject
Widać, że można ustawić obiekt docelowy z hierarchii.
Sprite
Może to być pytanie, co ustawić w .
W tym celu myślę, że "typ tekstury" pliku graficznego dodawanego do projektu to domyślnie "Sprite (2D i UI)", więc może być automatycznie traktowany jako sprite. Możesz więc traktować go jako sprite'a, po prostu ustawiając plik obrazu.
<summary>画像を変更するスプライトオブジェクト。</summary>
[SerializeField] private GameObject TargetSprite;
<summary>変更後の画像を持つスプライト。</summary>
[SerializeField] private Sprite NextSprite;
OnClick
Oczekuje się, że metoda zostanie wywołana po kliknięciu przycisku. Nazwa metody jest dowolna.
OnClick
W metodzie przełączamy obraz.
Ponieważ jest tym, który ma SpriteRenderer
informacje o obrazie, pobieramy komponent z SpriteRenderer
GameObject.
SpriteRenderer
Klasa ma właściwość, w której można zamienić obraz, ustawiając go na duszka, który ma sprite
nowy obraz.
// 変更対象のオブジェクトが持つ SpriteRenderer を取得
var spriteRenderer = TargetSprite.GetComponent<SpriteRenderer>();
// 省略
// SpriteRenderer の sprite に変更後のスプライトをセット
spriteRenderer.sprite = NextSprite;
Po zapisaniu skryptu dołącz go do obiektu. Obiekt, który ma zostać dołączony, jest opcjonalny, ale w tym przypadku EventSystem
jest dołączony do .
Ponieważ istnieją parametry "Target Sprite" i "Next Sprite", "Target Sprite" ma obiekty sprite z hierarchii,
"Następny Sprite" jest ustawiany na zmieniony plik obrazu z projektu.
Określ metodę ze OnClick
skryptu dołączonego do zdarzenia EventSystem
kliknięcia przycisku.
Uruchom grę i spróbuj nacisnąć przycisk. Jeśli wizerunek się zmieni, to sukces.