สร้างเกม - OnMouseDown and void/IEnumeretor (Unity3D Thailand)


          สอน Unity3D คำสั่ง click ที่วัตถุหรือ Object และคำสั่งเปลี่ยน scene- บทความนี้พูดถึงการใช้คำสั่งคลิก หรือฟังชั่น OnMouseDown() นั้นเอง เราจะใส่ Void หรือ IEnumerator ก็ได้นะครับ แต่ในวิดีโอเป็น IEnumerator ครับ สำหรับ IEnumerator เป็นฟังชั่นที่ต้อง return ค่า ที่จะใช้หน่วงเวลานั้น แต่ถ้าใส่ void ก็ไม่จำเป็นต้อง return ค่านะครับ ลองกันดูครับ กับ Unity3D Thailand (Thai Unity)

ตัวอย่างการคลิกไปยัง object นั้นๆนะครับ ลองดูกันนะครับ ^_^


** ถ้าคลิปไม่ขึ้นไปตามลิ้งเลยครับ http://youtu.be/WxMqadSH6gU

          ก็ภายในตัวอย่างวิดีโอก็เป็นการใช้ คำสั่ง click ที่วัตถุหรือ Object และคำสั่งเปลี่ยน scene ครับ หลังจากที่เราสร้าง scene ขึ้นมาเพิ่มเป็น 2 scene แล้ว เราก็ไปทำการ เพิ่มซีนเข้าไปใน Build Setting โดยไปที่ File เลือก Build Setting แล้วก็ลากซีนมาไว้ข้างในส่วนของ scene in build ตามรูปด้านล่างแล้วกดปิดไปครับ 






          จากรูปด้านบนจะเห็นว่ามี scene2 เพิ่มเข้ามาเป็นสอน scene นะครับ และตัวเลขด้านขวาที่มี 0 กับ 1 นั้นก็เป็น index ของ scene นั้นๆ ซึ้งสามารถนำไปเรียกใช้ตอนเขียนโค้ดได้ครับ ถ้าเราต้องการให้ scene1 เป็น index ที่ 0 เราก็สามารถเปลี่ยนได้โดยการลากมันเลื่อนขึ้นไปนะครับ หรือถ้าต้องการลบซีนออก ก็สามารถลบได้ โดยการคลิกเลือกแล้วกดปุ้ม delete ได้เลยครับ

          รูปด้านบนก็เป็นตัวอย่างโค้ดคร้าวๆครับ โดยใช้คำสั่ง Application.LoadLevel("ระบุชื่อซีน");  ซึ้งจำเป็นต้อง add ซีนเข้าไปไว้ใน scene in build เสียก่อนตามรูปด้านล่างครับ  ส่วนเราอยากคลิกที่ Object ไหน เราก็ใส่คลิปที่เรามีฟังชั่น OnMouseDown() เข้าไปใน Object นั้นๆครับ ซึ้งไม่ได้มีแค่ OnMouseDown() ครับ ยังมีอื่นๆอีกเช่น OnMouse() , OnMouseUp() เป็นต้นครับ

          ลองมาไล่โค้ดดูทีละบรรทัดกันเลยครับ

  • บรรทัดแรก IEnumerator OnMouseDown() {} - IEnumerator จะคล้ายๆกับ void อย่างที่บอกไปตอนต้นบทความครับ ที่บอกว่า  IEnumerator เป็นฟังชั่นที่ต้อง return ค่า ที่จะใช้หน่วงเวลานั้น แต่ถ้าใส่ void ก็ไม่จำเป็นต้อง return ค่า ส่วน OnMouseDown() นั้นเป็นชื่อฟังชั่นที่ตายตัวครับ ไม่ได้เป็นชื่อฟังชั่นที่เราเรียกมาเอง คือเป็นฟังชั่นเฉพาะนั้นเองครับ ฟังชั่น OnMouseDown() เป็นฟังชั่นที่คอยตรวจสอบการคลิกนั้นเองครับ ซึ่งถ้าคำสั่ง อยู่ในสคริปที่ยัดไว้ใน Object ตัวไหน เมื่อเราคลิกที่ Object ตัวนั้น การทำงานก็จะเข้าทำภายในฟังชั่น OnMouseDown() นั้นเองครับ ซึ้งเราสามารถใช้ void ก็ได้ แต่ในตัวอย่างอยากลองยกตัวอย่าง IEnumerator มาให้รู้จักกันเพียงเท่านั้นเองครับ
  • บรรทัดสอง yield return new WaitForSeconds(0f); - เป็นคำสั่งที่จะ return ค่าที่เราได้หน่วงเวลาไว้เป็นวินาที ในวงเล็บจะเห็นว่าเป็น 0f ก็คือไม่ได้หน่วงเวลาเลยนั้นเองครับ ซึ่งพอเป็นฟังชั่นแบบ  IEnumerator แบบนี้ก็จำเป็นต้องมีบรรทัด return ค่าบรรทัดไว้ในฟังชั่นทุกครั้ง ซึ้งเอาไว้บรรทัดไหนก็ได้แล้วแต่เราจะไปปรับใช้นะครับ
  • บรรทัดสาม - ก็เป็นการแสดงผลธรรมดาเหมือนในบทความก่อนหน้านี้ครับ 
  • บรรทัดสี่ - Application.LoadLevel("scene2"); - เป็นคำสั่งเป็น scene นั้นเองครับ ซึ่งในวงเล็บสามารถที่จะใช้เป็น string โดยใส่ชื่อ "scene2" หรือใช้เป็น index ก็ได้โดยในวงเล็บก็ใส่ 0 หรือ 1 ... ก็ได้ครับ ตามรูปแรก

          void และ IEnumerator  - บทความนี้ มาดูการใช้งาน IEnumerator ที่เมื่อเราประกาศฟังชั่นเป็นแบบนี้ ก็ต้องใช้คำสั่งรีเทิร์นค่าที่เป็นการหน่วงเวลาไว้ภายในฟังชั่นที่เป็น IEnumerator นี้ด้วยครับ

          ข้างล่างนี้เป็นรูปแบบการเรียกใช้และประกาศฟังชั่นแบบ void ที่เราใช้กันบ่อยๆ ภายในฟังชั่น มีการ Debug.log เพื่อให้แสดงผลว่า
"hi"
"david"


          ส่วนรูปข้างล่างนี้เป็นรูปแบบการเรียกใช้และประกาศฟังชั่นแบบ IEnumerator ภายในฟังชั่น มีการ Debug.log เพื่อให้แสดงผลว่า 
"hi"
*** รอ 3 วินาที
ถึงจะแสดง
"david"


          เพียงเท่านี้เราก็จะได้การคลิกที่ Object และการเปลี่ยน scene ไปทั้งสองอย่างหวังว่าจะเป็นประโยชน์กับเพื่อนๆนะครับ

สามารถอ่านบทความที่เกี่ยวข้องของเราที่นี่  >> รวมลิ้งค์บทความ สร้างเกมด้วย Unity

1 ความคิดเห็น:

  1. ช่วยสอน การเซฟ ข้อมูลตัวเลขคัวอักษร และภาพ หน่อยซิคะ

    ตอบลบ

ขับเคลื่อนโดย Blogger.