UnityEvent
4 นาที
Unity มอบ UnityEvents เพื่อทำให้ผู้ใช้สามารถใช้เหตุการณ์และตัวแทน C# ได้ง่ายขึ้น.
UnityEvents เป็นวิธีการส่งอาร์กิวเมนต์จากวัตถุที่แตกต่างกันหรือส่งข้อความเมื่อมีการตอบสนองบางอย่างที่ตรงตามข้อกำหนด.
ในการใช้ UnityEvent ใน ZEPETOScript คุณต้องประกาศในรูปแบบดังต่อไปนี้.
ก่อนอื่นให้เพิ่มคำสั่งนำเข้าเหมือนที่แสดงด้านล่างเพื่อใช้คลาส UnityEvent.
import { UnityEvent } from 'UnityEngine.Events';ดูตัวอย่างโค้ดการเชื่อมต่อสำหรับ UnityEvent.
import { ZepetoScriptBehaviour } from 'ZEPETO.Script';
import { UnityEvent } from 'UnityEngine.Events';
import { Button } from 'UnityEngine.UI';
export default class Event extends ZepetoScriptBehaviour {
public btn : Button;
private mEvent: UnityEvent;
Start() {
// สร้างอินสแตนซ์ใหม่ของ UnityEvent และกำหนดให้กับ mEvent.
this.mEvent = new UnityEvent();
// เพิ่มผู้ฟังใหม่ให้กับ mEvent ผู้ฟังนี้จะเรียกใช้เมธอด Ping เมื่อ mEvent ถูกเรียก.
this.mEvent.AddListener(() => this.Ping());
// ตรวจสอบว่ามีการคลิกปุ่มและ mEvent ไม่เป็น null.
this.btn.onClick.AddListener(() => {
if (this.mEvent != null) {
// หากเงื่อนไขข้างต้นเป็นจริง จะเรียกใช้ mEvent.
this.mEvent.Invoke();
}
});
}
Ping() {
console.log('Ping');
}
}
- คำอธิบายสคริปต์
- ในตัวอย่างข้างต้น UnityEvent ที่ชื่อว่า ‘mEvent’ จะถูกเรียกใช้ทุกครั้งที่มีการกดปุ่ม และจะเรียกใช้เมธอด ‘Ping’ เมื่อ ‘mEvent’ ถูกเรียก.
- ดังนั้นทุกครั้งที่มีการกดปุ่ม ข้อความ 'Ping' จะถูกพิมพ์ลงในคอนโซล.
หากเหตุการณ์ที่คุณกำลังจะเชื่อมต่อมีพารามิเตอร์ คุณต้องเพิ่มคำสั่งนำเข้า UnityEvent ตามที่แสดงด้านล่าง
import { UnityEvent$1 } from 'UnityEngine.Events';👍 เคล็ดลับ
- UnityEvent$1 เป็นเวอร์ชันทั่วไปของ UnityEvent
- ตัวอย่างเช่น หากคุณต้องการสร้างเหตุการณ์ที่รับค่าจำนวนเต็ม คุณสามารถใช้ UnityEvent$1<int>
- โปรดทราบว่าประเภทพารามิเตอร์ของ UnityEvent$1 จะต้องเป็นไปตาม C#
ตัวอย่างโค้ดเมื่อใช้ UnityEvent$1 กับพารามิเตอร์มีดังนี้
import { ZepetoScriptBehaviour } from 'ZEPETO.Script';
import { UnityEvent$1 } from 'UnityEngine.Events';
import { Input } from 'UnityEngine';
export default class Event extends ZepetoScriptBehaviour {
private mEventInt: UnityEvent$1<int>;
private countNum: number;
Start() {
this.mEventInt = new UnityEvent$1<int>();
this.mEventInt.AddListener(num => this.Count(num));
this.countNum = 0;
}
Update() {
if ((Input.anyKeyDown) && (this.mEventInt != null)) {
this.mEventInt.Invoke(this.countNum);
++this.countNum;
if (this.countNum > 100) {
this.countNum = 0;
}
}
}
Count(num) {
console.log(`Count : ${num}`);
}
}
คุณสามารถเรียนรู้เพิ่มเติมเกี่ยวกับ UnityEvents ได้โดยการคลิกที่ลิงก์ด้านล่าง