Game Engine ที่น่าสนใจในพื้นฐานของความง่ายและเหมาะกับนักพัฒนาเกมเริ่มต้นอีกตัวในช่วงนี้คือ Godot Engine เหมาะกับนักพัฒนาเกมมือใหม่
เรามาเริ่มต้นพัฒนาเกมด้วย Game Engine ตัวใหม่อย่าง Godot Engine (อ่านว่า โก-ดด) กันหน่อยดีกว่า ว่ามันมีอะไรบ้าง เริ่มต้นคือ เข้าไปที่เว็บไซต์ https://godotengine.org/features
จะเห็นว่ามันสามารถพัฒนาเกม 2D ได้อย่างง่าย และควบรวมไปถึง 3D ด้วย (ส่วนตัวลองใช้งานเปรียบเทียบส่วนของ 3D ยังไม่ค่อย Smooth เท่าไร แต่ 2D โอเคเลย)
สิ่งที่ชอบที่สุดของเจ้า Godot Engine ส่วนตัวของผมเลยคือ การทำ Animation จาก Sprite Sheet เหมือน Dragon Bone หรือ Sprite Editor ดีๆตัวนึง อีกส่วนคือเรื่องของการใช้ภาษาโปรแกรมที่เป็น syntax แบบ ที่ใกล้เคียง Python
มาลองกันหน่อยดีกว่าให้ดาวน์โหลด และติดตั้งเจ้า Godot Engine ลงเครื่องของเราก่อน เมื่อพร้อมแล้วเราจะเห็นหน้าเริ่มต้นโปรแกรมดังนี้:
รูปแบบการออกแบบ Hierarchy เป็นหลัก Node Structure โดยมี Parent และ Child (ใกล้เคียง Hierarchy ของ Unity2D) คือ Node แม่จะเป็น Node ควบคุม Instance ลูก และก็สามารถแยกย่อยแก้ไขตามระดับได้อย่างอิสระ
ในตัวอย่างนี้ผมจะใช้ กราฟิก 2 ชิ้นคือกราฟิก ดังนี้:
เปิดโปรแกรมเลือก Folder ของ Project
เราจะเจอหน้าจอการทำงานดังนี้:
หน้าจอจะมีความคล้ายคลึงกับ Editor ของ Game Engine ตัวอื่นๆ ทางด้านซ้ายส่วนที่เป็น FileSystem คือ ไฟล์ Assets ทั้งหมดที่ถูกจัดเก็บไว้ใน Folder เดียวกัน Game ที่เราจะสร้าง แบ่งด้วยตำแหน่งด้านล่างคือ Preview Windows ฝั่งขวามือ คือ Scene จะมีความคล้ายกับ Hierarchy ของ Editor แต่เราจะทำงานแบบ Node เป็นหลักตามที่อธิบายไว้ข้างบน ด้านล่างคือ Inspector ตัวปรับแต่งค่าคุณสมบัติต่างๆ ของ Node ที่ถูกวางไว้ใน Scene เช่น ตั้งค่าความเร็ว แก้ไข Parameter อื่นๆ
เบื้องต้นให้เราไปที่ Scene
คลิกขวา หรือเพิ่มที่เครื่องหมาย + จะเปิด Dialog สำหรับสร้าง Node ซึ่งรายละเอียดรูปแบบของ Node ที่ต้องการสร้าง จะแสดงรายการมากมาย
ตัวแรกให้เราคลิกเลือกที่ Node แล้วกด Create เสีย พร้อมเปลี่ยนชื่อเป็น World เพื่อตั้งค่า Setup Scene เกม
คลิกขวาที่ World (Node ที่เพิ่งสร้าง) เลือก + Add Child node หลังจากนั้นให้เราค้นหาคำว่า KinematicBody2D
ทำการเปลี่ยนชื่อ KinematicBody2D เป็น Player (ระวังเรื่อง Case Sensitive) ทำการ + Add Child Node เพิ่มใน Player อีกที เลือก Sprite
ไปที่ Tool Bar เลือก Import -> Texture เพื่อนำภาพกราฟิกของเราใส่เข้าไปใน FileSystems ของ GoDot Engine สำหรับสร้าง Player ของเกม
เลือก Path ของไฟล์กราฟิกของเราไปใช้ได้เลย ทำการ Import เป็น 2D เก็บลงใน folder ชื่อ Assets
หลังจากนั้นลากไฟล์ Player.png ใน Assets ไปวางใน Texture ส่วนของ Inspector ตัว Sprite ได้เลยตามภาพตัวอย่าง
เราจะเห็นว่าตอนนี้ เกมของเรามี Player ไปปรากฏบน Editor แล้ว
ขั้นตอนต่อไปคือการเพิ่ม Script โปรแกรมลงไปใน Player เพื่อทำการควบคุมเบื้องต้น ภาษาโปรแกรมของ godot Engine จะมี C++ และ GDScript ซึ่งมี Syntax คล้าย Python และ Lua (เขียนง่าย ไม่ต้องกลัว), ส่วนใครที่ถนัดความมันของ C++ ให้ลองปรับ Editor ตาม Documents ของ Godot ตามนี้ครับ: http://docs.godotengine.org/en/stable/development/cpp/custom_modules_in_cpp.html
ทำการคลิกขวาที่ Player แล้วเลือก “Attach Script”
ตั้งชื่อ Script ที่เพิ่มเข้าไปว่า player.gd ให้เรียบร้อย:
Godot Engine จะมีเรื่องเด็ดอยู่คือ Code Editor ที่อยู่ในตัวของมันเองเลย ซึ่งใครกำลังเริ่มต้นกด ปุ่ม Tutorial ได้อ่านคู่มือทำตามสบายๆ
การสร้าง Function Initial() ของ Godot นั้นจำต้องมีการประกาศ เพราะ Process ต่างๆ ของตัว Godot นั้นจะถูกเรียก Callback เสมอ หากไม่ต้องการให้ตรวจสอบว่า callback ทำงานได้หรือไม่ เพื่อไม่ให้เสียเวลาจำต้องประกาศคำสั่งเพื่อเช็คว่า โปรแกรมทำงานอยู่ตลอดเวลาไหมโดยเขียนเพียงครั้งเดียวให้ประกาศ:
extends KinematicBody2D func _ready(): set_process(true) pass
ส่วนของการทำงานที่ใกล้เคียงกับ Update() ที่มีการนับ DeltaTime ของเกมแบบ time elapsed ทั้ง seconds หรือ floating point นับไปเรื่อยๆ นั้นให้ประกาศ function เพิ่มมาว่า เพื่อใช้กับ set_process()
func _process(delta): pass
ดังเกตดูจะเห็นว่า Class ของ Script มีการ Extend ตัว KinematicBody2D ให้ตามส่วนของ node ที่เรา Attach Script เข้าไป ขั้นตอนต่อไปคือการควบคุม การเคลื่อนที่ของตัวละคร:
ทำการประกาศ Globa Variable ใต้ Extend ของ player.gd ดังนี้
var input_direction = 0 var direction = 0 var speed = 0 var velocity = 0 const MAX_SPEED = 500 const ACCELERATION = 1000 const DECELERATION = 2000
กำหนด input_direction คือทิศที่จะไป direction คือค่าเคลื่อนที่ Sprite เป็น + ไปทางเป็น – ไปทาง, speed, valocity คือ ความเร็วของการเคลื่อนที่ โดยกำหนด Const คือ MAX_SPEED ให้ห้ามเกิน 500 มีอัตราเร่ง ACCELERATION และผ่อน ที่ 1000 และ 2000
สำหรับการควบคุมของ Godot Engine จะใช้การเรียกค่าของแป้นบังคับ
Input.is_action_pressed("ui_left") Input.is_action_pressed("ui_right")
ประกาศคำสั่งต่อไปนี้ใน func _process(delta):
if input_direction: direction = input_direction if Input.is_action_pressed("ui_left"): input_direction = -1 elif Input.is_action_pressed("ui_right"): input_direction = 1 else: input_direction = 0
เป็นการรับค่าจากแป้นพิมพ์ ลงใน input_direction โดยค่าที่ได้เก็บลง direction เช่นกัน สร้างเงื่อนไขคือ Input.is_action_pressed(“ui_left”) ให้ค่า input_direction เป็น -1 คือเลื่อนไปทางซ้าย (0 คือตรงกลาง), และ ui-right ให้เป็น 1 นั่นคือไปทางขวา
การคำนวนอัตราเร่ง และ เพิ่มความเร็วคือการใช้เงื่อนไข:
# MOVEMENT if input_direction == - direction: speed /= 3 if input_direction: speed += ACCELERATION * delta else: speed -= DECELERATION * delta speed = clamp(speed, 0, MAX_SPEED) velocity = speed * delta * direction move(Vector2(velocity, 0))
ใช้ ความเร่งเมื่อมีการกดแป้นค้าง * delta ของเวลาใน Process ให้คำนวณไปต่อเนื่องแล้วเพิ่ม speed จนเต็ม Limit เช่นกันถ้ามีการเปลี่ยนทิศทางให้ลดค่า speed ลงแล้วไปเพิ่มทีหลัง โดยใช้ direction เป็นตัวกำหนดทิศ
ดังนั้นคำสั่งของ player.gd จะเป็นดังนี้:
extends KinematicBody2D var input_direction = 0 var direction = 0 var speed = 0 var velocity = 0 const MAX_SPEED = 600 const ACCELERATION = 1000 const DECELERATION = 2000 func _ready(): set_process(true) pass func _process(delta): if input_direction: direction = input_direction if Input.is_action_pressed("ui_left"): input_direction = -1 elif Input.is_action_pressed("ui_right"): input_direction = 1 else: input_direction = 0 # MOVEMENT if input_direction == - direction: speed /= 3 if input_direction: speed += ACCELERATION * delta else: speed -= DECELERATION * delta speed = clamp(speed, 0, MAX_SPEED) velocity = speed * delta * direction move(Vector2(velocity, 0)) pass
ทดสอบเกมของเรากันหน่อย กด Run เกมเลย
ลองกด A,D หรือ ซ้าย, ขวา ค้างแล้วปล่อย เราจะควบคุมการเคลื่อนที่ของตัวละครได้
เป็นบทความสำหรับนักพัฒนาเกมสาย Indies ที่ต้องการ Game Editor และ Engine ที่เป็น Open Sources ไว้ใช้งานสร้างสรรค์ ตัว Godot engine นี้ผมมองว่าในระดับของ 2D เป็นอะไรที่สร้าง Learning Curve ได้ไวพอตัว และเกมพวก Simulation จีบสาว นั้นคนที่ไม่เก่ง Code แต่เก่งวาดภพ สามารถนำไปใช้สร้างเกมได้สบายๆ
สำหรับศักยภาพของมัน ยังสามารถสร้างเกม 3D ได้ด้วยนะครับ
3 Comments