เปลี่ยนภาพสไปรท์ในขณะที่เกมกําลังทํางานอยู่
สภาพแวดล้อมการตรวจสอบ
- หน้าต่าง
-
- หน้าต่าง 11
- บรรณาธิการ Unity
-
- ปี 2020.3.25f1
- แพ็คเกจระบบอินพุต
-
- 1.2.0
ข้อกําหนดเบื้องต้นสําหรับเคล็ดลับนี้
การตั้งค่าต่อไปนี้ถูกกําหนดค่าไว้ล่วงหน้าเป็นข้อกําหนดเบื้องต้นสําหรับคําอธิบายของเคล็ดลับเหล่านี้
เกี่ยวกับการเปลี่ยนภาพของสไปรท์
อย่างที่คุณเห็นเมื่อเล่นเกม 2 มิติ คุณมักจะเห็นฉากที่ภาพถูกตั้งค่าเป็นสวิตช์สไปรท์ตรงกลาง ตัวอย่างเช่นประตูถูกปิดในตอนแรก แต่เมื่อเปิดประตูมันจะแสดงเป็นประตูที่เปิดอยู่
เพื่อให้บรรลุสิ่งนี้คุณสามารถเตรียมวัตถุสองชิ้นประตูปิดและประตูเปิดและแสดงหรือซ่อนไว้ ที่นี่เราจะพยายามทําให้สําเร็จโดยการเปลี่ยนภาพของสไปรท์
การเพิ่มและวางรูปภาพในโครงการ
คราวนี้คุณต้องมีภาพก่อนการเปลี่ยนแปลงและภาพหลังจากการเปลี่ยนแปลงดังนั้นโปรดเตรียมสองภาพ
UnityTips
UnityTipsChange
ที่นี่ชื่อไฟล์คือ ตามลําดับ
วางสไปรท์จากโครงการและวางไว้ เมื่อคลิกปุ่มภาพจะเปลี่ยนไปดังนั้นให้วางปุ่มจาก 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
การคลิกของปุ่ม
เรียกใช้เกมและลองกดปุ่ม หากภาพเปลี่ยนไปแสดงว่าประสบความสําเร็จ