שינוי תמונת הספרייט בזמן שהמשחק פועל

עודכן דף :
תאריך יצירת דף :

סביבת אימות

חלונות
  • חלונות 11
עורך Unity
  • 2020.3.25F1
חבילות מערכת קלט
  • 1.2.0

תנאים מוקדמים לטיפ זה

ההגדרות הבאות מוגדרות מראש כתנאי מוקדם להסבר של עצות אלה.

על שינוי התמונה של ספרייט

כפי שניתן לראות בעת משחק דו-ממדי, לעתים קרובות תראה סצנה שבה התמונה המוגדרת כספרייט מתחלפת באמצע. לדוגמה, הדלת סגורה בהתחלה, אך על ידי פתיחתה, היא מוצגת כדלת פתוחה.

כדי להשיג זאת, אתה יכול להכין שני אובייקטים, דלת סגורה ודלת פתוחה, ולהראות או להסתיר אותם. כאן, ננסה להשיג זאת על ידי החלפת התמונה של ספרייט.

הוספה ומיקום של תמונות בפרוייקט

הפעם, אתם צריכים תמונה לפני השינוי ותמונה אחרי השינוי, אז אנא הכינו שתיים. כאן, שם הקובץ UnityTipsUnityTipsChange הוא , בהתאמה.

שחררו את הספרייט מהפרויקט והניחו אותו. בעת לחיצה על הלחצן, התמונה משתנה, לכן מקם את הלחצן מממשק המשתמש.

יצירת סקריפט לשינוי תמונה

צור קובץ Script. השם הוא שרירותי, אבל במקרה SpriteChange זה , הוא .

הפעם, לחץ על הכפתור כך שתמונת הספרייט תשתנה בתזמון. כמו כן, הספרייט שיוחלף ייקבע מראש. אם תשנה אותו, תוכל ליצור ולהגדיר שדונים באופן דינמי. הדרך לשנות את זה היא בעצם זהה.

הסקריפט נראה כך:

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

בשטח, הכינו את הספרייט, את האובייקט שיש לשנות ואת הספרייט שיהיה התמונה לאחר השינוי.

GameObject ניתן לראות שניתן להגדיר את אובייקט היעד מההיררכיה. Sprite זו יכולה להיות שאלה של מה להגדיר .

לשם כך, אני חושב כי "סוג מרקם" של קובץ התמונה נוסף לפרויקט הוא "ספרייט (2D ו- UI)" כברירת מחדל, כך שניתן להתייחס אליו באופן אוטומטי כספרייט. אז אתה יכול להתייחס אליו כמו ספרייט רק על ידי הגדרת קובץ התמונה.

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

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

OnClick השיטה צפויה להיקרא בעת לחיצה על הלחצן. שם השיטה שרירותי.

OnClick בשיטה, אנחנו מחליפים את התמונה. מאז הוא אחד שיש לו SpriteRenderer את המידע התמונה, אנו מקבלים את הרכיב מן SpriteRenderer GameObject. SpriteRenderer המחלקה כוללת מאפיין שבו ניתן להחליף את התמונה על-ידי הגדרתה לספרייט הכולל sprite תמונה חדשה.

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

// 省略

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

לאחר שמירת הסקריפט, צרף אותו לאובייקט. האובייקט שיש לצרף הוא אופציונלי, אך במקרה EventSystem זה , הוא מחובר ל- . מכיוון שיש "ספרייט מטרגט" ו"ספרייט הבא" כפרמטרים, ל"ספרייט טרגט" יש אובייקטים של ספרייט מההיררכיה, "Next Sprite" מוגדר לקובץ התמונה שהשתנה מהפרויקט.

ציין את השיטה מהסקריפט OnClick המצורף לאירוע EventSystem הלחיצה של הלחצן .

הפעל את המשחק ונסה ללחוץ על הכפתור. אם התמונה משתנה, זו הצלחה.