วันพฤหัสบดีที่ 15 พฤษภาคม พ.ศ. 2557

[สอน C# for Unity] ตอนที่ 5 : การเข้าถึง Component



เราใช้สคริปเพื่อเปลี่ยนแปลงค่าและเรียกใช้คำสั่ง(ฟังชั่น)ใน component เพื่อให้เกิด action ต่างๆ,เกิดการเคลื่อนไหว,เปลี่ยนสี ,เล่นเสียง,เอฟเฟกประกอบ ให้ประสานกันกลายเป็นรูปแบบของการตอบสนองของเกม



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

บาง component เราดึงมาใช้ได้เลยจากการพิมชื่อ component ใส่จุด แล้วเลือกฟังชั่นหรือตัวแปรมาใส่ค่าจาก drop list


บาง component ที่ไม่เป็นที่นิยมเราต้องเรียก component มาก่อนถึงจะเข้าถึงได้ อย่างเช่น TextMesh SphereCollider BoxCollider ฯลฯ ไม่เหมือนกับ transform หรือ rigidbody ที่ใช้ได้เลย

วิธีการเอา component มาใส่ไว้ในตัวแปร
1.GetComponent มาใส่ไว้ในตัวแปร
  • คำสั่ง GetComponent<ชื่อcomponent>() เป็นคำสั่งเอาไว้ดึง component มาเรียกใช้ฟังชั่นหรือเข้าถึงตัวแปร เป็นคำสั่งที่ค่อนข้างหนักเครื่องไม่ควรเรียกบ่อย ให้หลีกเลี่ยงการเรียกคำสั่งนี้ให้ได้มากที่สุด  
  • ในตัวอย่าง ผมดึง Component มาเก็บไว้ในตัวแปร mySphere ซึ่งเป็น class SphereCollider


2.ใช้ตัวแปร public แล้วลากใส่จากใน Unity
  •  สร้างตัวแปร public
  • ใน Unity ให้ลากวัตถุที่มี component ประเภทตรงกันมาใส่ 

เรื่องที่ต้องระวัง
  • อะไรที่เกี่ยวกับ rigidbody หรือ collider มักจะแยกเป็นของ 2D / 3D ต้องใช้ให้ตรงกัน
  • GetComponent ใน Update บรรทัดเดียวไม่ได้หมายความว่าเรียกครั้งเดียว เพราะ Update จะโดนเรียกทุกๆเฟรมซึงบ่อยมาก
  • ถ้า GetComponent มาแล้วไม่เจอ component นั้นอยู่ในวัตถุจะทำให้สคริปพัง


สัญลักษณ์ใน Drop List ( Visual Studio )


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