Unity - โครูทีน

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

IEnumerator MyCoroutineMethod() {
   // Your code here…
   
   yield return null;
}

โดยทั่วไปถ้าคุณเรียกใช้ฟังก์ชันใน Unity (หรือ C # จริงๆ) ฟังก์ชันจะทำงานตั้งแต่ต้นจนจบ นี่คือสิ่งที่คุณจะพิจารณาพฤติกรรม "ปกติ" เท่าที่โค้ดของคุณเกี่ยวข้อง อย่างไรก็ตามบางครั้งเราต้องการทำให้ฟังก์ชันช้าลงโดยเจตนาหรือทำให้รอนานกว่าช่วงเวลาเสี้ยววินาทีที่มันทำงาน โครูทีนสามารถทำสิ่งนั้นได้: โครูทีนเป็นฟังก์ชันที่สามารถทำได้waiting และ timing กระบวนการของมันเช่นเดียวกับการหยุดชั่วคราวทั้งหมด

ให้เราพิจารณาตัวอย่างเพื่อทำความเข้าใจว่าโครูทีนทำงานอย่างไร สมมติว่าเราต้องการสร้างสี่เหลี่ยมที่เปลี่ยนสีระหว่างสีแดงและสีน้ำเงินในช่วงเวลา 1 วินาที

เริ่มต้นด้วยการสร้างสไปรท์ จากนั้นสร้างสคริปต์ใหม่และตั้งชื่อColorChanger. ในสคริปต์นี้เราได้รับการอ้างอิงถึงไฟล์Sprite Rendererของเทพดา อย่างไรก็ตามเราจะใช้วิธีอื่นในการรับส่วนประกอบ แทนที่จะลากและวางส่วนประกอบลงในช่องอย่างที่เราเคยทำมาเราจะขอให้รหัสตรวจหาส่วนประกอบนั้นเอง

สิ่งนี้ทำได้ผ่านไฟล์ GetComponentซึ่งจะส่งคืนส่วนประกอบที่ตรงกันแรกที่ตรวจพบ เนื่องจากเราใช้ Sprite Renderer เพียงตัวเดียวต่อออบเจ็กต์เราจึงสามารถใช้วิธีนี้เพื่อตรวจจับและรับการอ้างอิงไปยัง renderer ของเราโดยอัตโนมัติทุกครั้ง

โปรดจำไว้ว่าตัวแสดงผลมีหน้าที่ทำให้สไปรท์มองเห็นได้จริงบนหน้าจอ ตัวแสดงผลมีไฟล์colorคุณสมบัติที่มีผลต่อสีส่วนกลางของสไปรต์ นี่คือค่าที่จะแก้ไข การทำไฟล์Color ค่าสาธารณะจะให้เราเลือกผ่านตัวแก้ไขในโปรแกรมการเลือกสีเริ่มต้นของระบบปฏิบัติการของคุณ

private SpriteRenderer sr;

public Color color1;
public Color color2;

void Start () {
   sr = GetComponent<SpriteRenderer>();
   StartCoroutine(ChangeColor());
}

IEnumerator ChangeColor() {
   
   while (true) {
      
      if (sr.color == color1)
         sr.color = color2;
      
      else
         sr.color = color1;
      
      yield return new WaitForSeconds(3);
   }
}

ตอนนี้เราจะดักฟังก์ชั่นโครูทีนของเราในขณะที่ลูป

ในการสร้างโครูทีนใน C # เราเพียงแค่สร้างเมธอดที่ส่งคืน IEnumerator. นอกจากนี้ยังต้องการไฟล์yield returnคำให้การ. คำสั่งผลตอบแทนผลตอบแทนเป็นแบบพิเศษ เป็นสิ่งที่บอกให้ Unity หยุดสคริปต์ชั่วคราวและดำเนินการต่อในเฟรมถัดไป

มีหลายวิธีที่สามารถใช้เพื่อให้ได้ผลตอบแทน หนึ่งในนั้นคือการสร้างอินสแตนซ์ของไฟล์WaitForSecondsชั้นเรียน สิ่งนี้ทำให้โครูทีนรอสักครู่ในโลกแห่งความเป็นจริงก่อนดำเนินการต่อ

ให้เรารวบรวมรหัสของเราและกลับไปที่ Unity เราจะเลือกสีที่สลับกันแล้วกดเล่น ตอนนี้วัตถุของเราควรสลับไปมาระหว่างสองสีในช่วงเวลา 3 วินาที คุณสามารถกำหนดช่วงเวลาให้เป็นตัวแปรสาธารณะและปรับความถี่ของการเปลี่ยนสีได้เช่นกัน

Coroutines ใช้กันอย่างแพร่หลายสำหรับ timedวิธีการเช่นเดียวกับที่เราเพิ่งทำ ความหลากหลายของWaitForXวิธีการมีการใช้งานของตนเอง นอกจากนี้ยังใช้โครูทีนเพื่อเรียกใช้กระบวนการ "ด้านข้าง" ที่ทำงานด้วยตัวเองในขณะที่เกมดำเนินไปพร้อม ๆ กัน สิ่งนี้มีประโยชน์เช่นในการโหลดชิ้นส่วนนอกหน้าจอในระดับใหญ่ในขณะที่ผู้เล่นเริ่มต้นที่จุดหนึ่ง