เปลี่ยนภาพสไปรท์ในขณะที่เกมกําลังทํางานอยู่

ปรับปรุงหน้า :
วันที่สร้างเพจ :

สภาพแวดล้อมการตรวจสอบ

หน้าต่าง
  • หน้าต่าง 11
บรรณาธิการ Unity
  • ปี 2020.3.25f1
แพ็คเกจระบบอินพุต
  • 1.2.0

ข้อกําหนดเบื้องต้นสําหรับเคล็ดลับนี้

การตั้งค่าต่อไปนี้ถูกกําหนดค่าไว้ล่วงหน้าเป็นข้อกําหนดเบื้องต้นสําหรับคําอธิบายของเคล็ดลับเหล่านี้

เกี่ยวกับการเปลี่ยนภาพของสไปรท์

อย่างที่คุณเห็นเมื่อเล่นเกม 2 มิติ คุณมักจะเห็นฉากที่ภาพถูกตั้งค่าเป็นสวิตช์สไปรท์ตรงกลาง ตัวอย่างเช่นประตูถูกปิดในตอนแรก แต่เมื่อเปิดประตูมันจะแสดงเป็นประตูที่เปิดอยู่

เพื่อให้บรรลุสิ่งนี้คุณสามารถเตรียมวัตถุสองชิ้นประตูปิดและประตูเปิดและแสดงหรือซ่อนไว้ ที่นี่เราจะพยายามทําให้สําเร็จโดยการเปลี่ยนภาพของสไปรท์

การเพิ่มและวางรูปภาพในโครงการ

คราวนี้คุณต้องมีภาพก่อนการเปลี่ยนแปลงและภาพหลังจากการเปลี่ยนแปลงดังนั้นโปรดเตรียมสองภาพ UnityTipsUnityTipsChangeที่นี่ชื่อไฟล์คือ ตามลําดับ

วางสไปรท์จากโครงการและวางไว้ เมื่อคลิกปุ่มภาพจะเปลี่ยนไปดังนั้นให้วางปุ่มจาก UI

การสร้างสคริปต์เปลี่ยนรูปภาพ

สร้างสคริปต์ ชื่อเป็นโดยพลการ แต่ในกรณีนี้ 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 ในกรณีนี้ จะแนบมากับ . เนื่องจากมี "Target Sprite" และ "Next Sprite" เป็นพารามิเตอร์ "Target Sprite" จึงมีวัตถุสไปรท์จากลําดับชั้น "Next Sprite" ถูกตั้งค่าเป็นไฟล์ภาพที่เปลี่ยนแปลงจากโครงการ

ระบุวิธีการจากOnClickสคริปต์ที่แนบมากับเหตุการณ์EventSystemการคลิกของปุ่ม

เรียกใช้เกมและลองกดปุ่ม หากภาพเปลี่ยนไปแสดงว่าประสบความสําเร็จ