गेम चलने के दौरान स्प्राइट छवि बदलें

पेज अद्यतन :
पेज निर्माण की तारीख :

सत्यापन वातावरण

विंडोज़
  • विंडोज 11
एकता संपादक
  • 2020.3.25f1
इनपुट सिस्टम पैकेज़
  • 1.2.0

इस टिप के लिए आवश्यक शर्तें

निम्न सेटिंग्स इन युक्तियों के स्पष्टीकरण के लिए एक शर्त के रूप में पूर्व-कॉन्फ़िगर हैं।

स्प्राइट की छवि को बदलने के बारे में

जैसा कि आप 2 डी गेम खेलते समय देख सकते हैं, आप अक्सर एक दृश्य देखेंगे जहां स्प्राइट के रूप में सेट की गई छवि बीच में बदल जाती है। उदाहरण के लिए, दरवाजा पहले बंद होता है, लेकिन इसे खोलकर, इसे खुले दरवाजे के रूप में प्रदर्शित किया जाता है।

इसे प्राप्त करने के लिए, आप दो वस्तुओं को तैयार कर सकते हैं, एक बंद दरवाजा और एक खुला दरवाजा, और उन्हें दिखा या छिपा सकते हैं। यहां, हम स्प्राइट की छवि को बदलकर इसे प्राप्त करने की कोशिश करेंगे।

किसी प्रोजेक्ट में छवियों को जोड़ना और रखना

इस बार, आपको परिवर्तन से पहले एक छवि और परिवर्तन के बाद एक छवि की आवश्यकता है, इसलिए कृपया दो तैयार करें। यहां, UnityTipsUnityTipsChange फ़ाइल का नाम क्रमशः है।

स्प्राइट को प्रोजेक्ट से हटादें और इसे रखें। जब बटन पर क्लिक किया जाता है, तो छवि बदल जाती है, इसलिए यूआई से बटन रखें।

छवि परिवर्तन स्क्रिप्ट बनाना

कोई स्क्रिप्ट बनाएँ. नाम मनमाना है, लेकिन इस मामले 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 यह एक सवाल हो सकता है कि क्या स्थापित किया जाए।

इसके लिए, मुझे लगता है कि परियोजना में जोड़ी गई छवि फ़ाइल का "बनावट प्रकार" डिफ़ॉल्ट रूप से "स्प्राइट (2 डी और यूआई)" है, इसलिए इसे स्वचालित रूप से स्प्राइट के रूप में माना जा सकता है। तो आप छवि फ़ाइल सेट करके इसे स्प्राइट के रूप में मान सकते हैं।

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

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

OnClick बटन क्लिक करने पर विधि को कॉल किए जाने की उम्मीद है। विधि का नाम मनमाना है।

OnClick विधि में, हम छवि को बदल रहे हैं। चूंकि वह है जिसमें छवि की जानकारी है SpriteRenderer , इसलिए हम गेमऑब्जेक्ट से घटक प्राप्त करते हैं SpriteRendererSpriteRenderer कक्षा में एक संपत्ति है जहां आप छवि को स्प्राइट पर सेट करके स्वैप कर सकते हैं जिसमें एक sprite नई छवि है।

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

// 省略

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

स्क्रिप्ट सहेजने के बाद, इसे ऑब्जेक्ट से अनुलग्न करें. संलग्न की जाने वाली वस्तु वैकल्पिक है, लेकिन इस मामले EventSystem में, यह इससे जुड़ी हुई है। चूंकि मापदंडों के रूप में "टारगेट स्प्राइट" और "नेक्स्ट स्प्राइट" हैं, इसलिए "टारगेट स्प्राइट" में पदानुक्रम से स्प्राइट ऑब्जेक्ट हैं, "नेक्स्ट स्प्राइट" प्रोजेक्ट से बदली हुई छवि फ़ाइल पर सेट है।

बटन के क्लिक इवेंट EventSystem से अनुलग्न स्क्रिप्ट से OnClick विधि निर्दिष्ट करें.

गेम चलाएँ और बटन दबाने का प्रयास करें। यदि छवि बदलती है, तो यह एक सफलता है।