(ไทย) Unity กับ Coroutine by tosawat
Jul0
ความหมาย ??
Coroutine เป็นการทำงานคูขนานกันของโปรแกรมสองโปรแกรม โดยจะทำงานสลับกันไปมาและมีช่วงเวลาการทำงาน ดังนั้นทั้งสองโปรแกรมจึงต้องมีตารางแบ่งเวลาการทำงาน
Couroutine ใน Unity
เมื่อเราเรียก function ใดๆ function นั้นๆ จะทำงานจนจบกระบวนการคำนวนแล้วจึง return ค่ากลับมา ในกระบวนการดังกล่าวจะทำให้เสร็จในการ update frame 1 ครั้งเท่านั้น และไม่สามารถ ส่งตัวแปรข้าม frame ได้ นอกจากจะประกาศตัวแปรไว้นอก function
ตัวอย่าง
void Fade() {
for (float f = 1f; f >= 0; f -= 0.1f) {
Color c = renderer.material.color;
c.a = f;
renderer.material.color = c;
}
}
void Update() {
if (Input.GetKeyDown(“f”)) {
Fade();
}
}
จากตัวอย่าง เราต้องการให้ object ค่อยๆ fade ออก แต่ถ้าเราเขียนแบบนี้ object จะหายไปเลย เพราะว่า function นี้ทำงานจนจบแล้วจึง update frame ต่อไป ดังนั้นเราจะต้องเขียนแบบนี้แทน
IEnumerator Fade() {
for (float f = 1f; f >= 0; f -= 0.1f) {
Color c = renderer.material.color;
c.a = f;
renderer.material.color = c;
yield return null;
}
}
void Update() {
if (Input.GetKeyDown(“f”)) {
StartCoroutine(“Fade”);
}
}
ใน UnityScript function ใดๆ ที่มี yield อยู่จะถือเป็น Coroutine โดยอัตโนมัติ และไม่ต้องเรียก StartCoroutine ด้วย การเรียก function ที่มี yield จะถือว่าเรียก StartCoroutine ไปโดยปริยาย
ตัวอย่าง
function Fade() {
for (var f = 1.0; f >= 0; f -= 0.1) {
var c = renderer.material.color;
c.a = f;
renderer.material.color = c;
yield;
}
}
function Update() {
if (Input.GetKeyDown(“f”)) {
Fade();
}
}