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

[สอน C# for Unity] ตอนที่ 2 : ตัวแปร




ตัวแปรเป็นสิ่งที่ขาดไม่ได้เลยในการโปรแกรมเกม
นึกดูสิถ้าคุณเล่น flappy bird อยู่แต่กลับไม่มีตัวแปรเก็บคะแนนที่เราอุตส่าบินผ่านท่อเขียวๆพวกนั้นมา
เเล้วเราก็จะเบื่อกับเกมนั้นเพราะไม่มีคะแนนไปอวดเพื่อนและชวนไฝ้ว์ต่อ




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



วิธีประกาศตัวแปรค่อนข้างจะซับซ้อนนิดหน่อยเพราะเป็นส่วนที่สำคัญ
การประกาศตัวแปรครั้งนึงจะต้องระบุตามแบบนี้นะ


ประเภทตัวแปร
  • ตัวแปรทุกตัวต้องระบุประเภทว่าเอาไว้เก็บอะไร - เลข - ตัวอักษร - คำ - ภาพ ฯลฯ
  • ประเภทตัวแปร ควรจะตรงกับ สิ่งที่เก็บไว้ในตัวแปร ถ้าเราจะเก็บค่าทศนิยม ก็ไม่ควรเก็บในตัวแปรจำนวนเต็มเพราะตัวเลขจะเพี้ยนไป
  • ตัวแปรสามารถที่จะเป็น script (คลาส) หรือเป็น component ก็ได้ แล้วเราก็เข้าถึงค่าต่างๆใน component ได้ด้วย
  • มีประเภทเยอะมวากกก แต่ประเภทก็ค่อนข้างตรงกับชื่อเลยไม่ต้องคิดมากเท่าไหร่
int - (integer) เก็บจำนวนเต็ม
float - เก็บค่าทศนิยม
string - เก็บข้อความหรือประโยค
Vector2 - เก็บพิกัด 2D (x,y)
Vector3 - เก็บพิกัด 3D (x,y,z)
Color - เก็บค่าสี (red,green,blue,alpha)
GameObject - เก็บวัตถุและเข้าถึง transform,collider หรือ rigidbody ได้

ชื่อตัวแปร
  • มีกฎการตั้งชื่อคล้ายกับการตั้งชื่อไฟล์สคริปในตอนที่เเล้ว
  • ห้ามใช้ คำพวกนี้ เป็นตัวแปรเพราะจะไปซำ้กับคำสั่งพื้นฐาน
  • ห้ามขึ้นต้นด้วยตัวเลขหรือเครื่องหมาย + - * /
  • ห้ามมีตัวแปรชื่อซำ้กัน
  • ห้ามเว้นวรรค
อีกสิ่งนึงที่สำคัญมาก คือควรตั้งชื่อให้รู้ว่าตัวแปรนี้คือเก็บค่าอะไรอย่างชัดเจน เพราะเชื่อผมเถอะเวลาเขียนเกมไปซักพัก จะเริ่มมีตัวแปรที่ใช้งานคล้ายๆกันเเล้วเราจะมึนเองว่าอันไหนคืออะไรกันแน่ อย่าตั้งชื่อที่คลุมเครืออย่าง color พอมาเห็นก็อาจจะสงสััยว่ามันสีของอะไรหรอ ก็ควรระบุให้ชัดไปเลย แล้วยิ่งเวลาที่ทำงานร่วมกับคนอื่นเนี่ย จะทำให้คนอื่นเข้าใจโค้ดเราได้ง่านขึ้นมากครับ

กำหนดค่า
  • ให้กำหนดค่าในลักษณะที่ตรงกับประเภทตัวแปร ตามตัวอย่างข้างบนเลยนะครับ
  • เราอาจจะยังไม่กำหนดค่าเริ่มต้นของตัวแปรโดยปล่อยว่างส่วนนี้เอาไว้แล้วใส่ค่าทีหลังก็ได้ แต่เมื่อไหร่ที่เราเรียกใช้ตัวแปรที่ยังไม่ได้ใส่ค่าลงไปเกมมันจะ error นะ


ขอบเขตการใช้งานของตัวแปร


  • เวลาตัวแปรถูกประกาศ มันจะใช้ได้แค่ในบริเวณปีกกาของมันเอง ถ้าออกนอกปีกกาที่ถูกประกาศจะ error
  • ถ้าผมประกาศตัวแปรในปีกกาที่ 1 ผมจะใช้ได้ทั้งในปีกกา 2 และ 3 ด้วย เพราะ 2 และ 3 ก็อยู่ในปีกกา 1
  • แต่ถ้าประกาศตัวแปรในปีกกาที่ 2 ก็จะเอาตัวแปรนั้นไปใช้ใน 1 หรือ 3 ไม่ได้
ตัวแปรจะมีขอบเขตอีกระดับนึง คือการเข้าถึงในระดับสคริป(คลาส) ที่สคริปแต่ละตัวจะขอใช้ตัวแปรร่วมด้วย ก็จะมีคำที่ใส่ข้างหน้าเพื่อกำหนด
  • private - ไม่ให้สคริปอื่นมาใช้เลย  
  • public - อณุญาติให้ใช้ได้ เเล้วก็ให้เรากำหนดค่าเริ่มต้นจาก inspector ได้เลย