ทำเกม Multiplayer ด้วย Node js และ Socket.io ตอนที่ 3

การใช้งาน Unity

จากครั้งที่แล้วที่เราเตรียมโค้ดฝั่งเซิฟเว่อไว้แล้ว วันนี้เราจะมาทำโค้ดฝั่ง Client กันครับ

ตอนนี้ใน Client ของเราจะมีหน้าตาแบบนี้ครับ

และโค้ดของ Network client เราจะมีส่วนประกอบแบบนี้ครับ

ซึ่งสิ่งที่เพิ่มเข้ามาก็จะมี

private Transform networkContainer; ใส่ serialize ไว้เพื่อให้เราสามารถ Reference หา Object ใน Scene ได้ โดยเราจะสร้าง GameObject สำหรับเก็บ Object ที่ถูก Spawn มาจาก Server ไว้ใน GameObject ตัวนี้ครับ

private Dictionary<string, GameObject> serverObjects;

สร้าง Dictionary มาเก็บ Id key และ GameObject ที่คู่กันไว้ด้วยกันเพื่อง่ายต่อการใช้งาน

  private void Initialize()    {

        serverObjects = new Dictionary<string, GameObject>();

    }

ฟังชั่นก์เอาไว้เคลีย Dictionary ของเราตอนเริ่มเกมครับ

ถัดมาใน SetupEvents ฟังชั่นก์ เราจะทำการรับค่ากลับมาว่าเราสามารถ Connect เข้า Server ด้วย ฟังชั่นก์ On แบบนี้ครับ

ซึ่งตอนนี้หากเรา Play จะมี  Debug อกมาว่า  “Connect to server”  และในส่วนของ Server ก็จะมีคำว่า “Connected” ขึ้นใน Console ครับ

จากนั้นเราจะรับ Event  (“register”) ซึ่งส่งมาจาก Server ผ่าน บรรทัดนี้ครับ

โดยสิ่งที่ส่งมามี  PlayerID ดังนั้นฟังชั่นก์ที่ใช้รับก็จะต้องรับ PlayerID มาเก็บไว้ด้วยครับ ซึ่งเราจะเขียนฟังชั่นก์ตามนี้ครับ

และเมื่อเรากด Play เราจะได้ Debug มาดังนี้ครับ

จากนั้นเราจะสร้างฟังชั่นก์เพื่อรับ Event spawn ซึ่งส่ง player object มาจากบรรทัดนี้สำหรับผู้เล่นที่เพิ่ง register เข้ามาในห้อง

 และ spawn ผู้เล่นทั้งหมดที่อยู่ในเซิฟเว่อร์จากโค้ดช่วงนี้ครับ

โดย Code ฝั่ง Client จะมีหน้าตาแบบนี้ครับ

จากโค้ดเราจะรับค่า ID ของ Player แล้วสร้าง Game Object ตัวใหม่ใส่ไว้ใน networkContainer และเอาไปใส่ใน Dictionary serverObjects ด้วยครับ

จากนั้นเราจะสร้างฟังชั่นก์สำหรับเวลาที่ผู้เล่น Disconnect  ตามโค้ดนี้ครับ

ซึ่งจะทำการทำลาย Player object ของ id ผู้เล่นที่ทำการ Disconnect และ ลบออกจาก serverObjects ด้วยครับ ซึ่งตอนนี้ในฝั่ง Server เราจะยังไม่มีตัวมารับอีเวนท์ disconnected เราจะมาเพิ่มเข้าไปตามรูปนี้ครับ

อย่าลืมสร้าง GameObject ใน Scene เพื่อใช้เป็น Parent game object สำหรับ Player object ที่ spawn มา โดยลากไปใส่ช่อง Network container ด้วยนะครับ

เท่านี้ เราก็พร้อมเทสการเชื่อมต่อระหว่าง Server และ Client กันแล้วครับ

จากภาพผมได้ Build ตัว Client เป็น Exe อีกตัวแล้วเปิดขึ้นมาครับ จะเห็นได้ว่าตอนนี้มี Player object 2 ตัวแล้วเรียบร้อย

ในครั้งหน้าเราจะมาทำให้ Player object ขยับในทุกๆ Client กันต่อครับ ติดตามตอนต่อไปครับ

, , ,

บทความที่เกี่ยวข้อง

Menu