
บทเรียนการสร้างเกม Multiplayer ง่ายๆ บน Unity โดยใช้ Asset ชื่อว่า Mirror ทำเกมเล่นบน Network สำหรับสาย สร้างเกม 2 มิติครับ
เริ่มต้นให้ทำการ Create Project ขึ้นมาใหม่ผ่าน Unity Hub ครับ

ทำการดาวน์โหลด Asset ที่จำเป็นหน่อย ผมเลือกใช้ Free Assets จากเว็บไซต์นี้:
ก็ได้ ใช้ของเหล่านี้ครับ


ทำการจัด Background ของ Hierarchy ให้พร้อมเดินได้ตามตัวอย่างในภาพครับ ตั้งค่า Size ของ Main Camera เป็น 1 และกำหนด Sprite2D ส่วนของ Sprite Renderer ของ Order in Layer 2 ภาพ เช่นภาพท้องฟ้า และทุ่งหญ้าตามตัวอย่าง


ส่วนของทุ่งหญ้าต้นไม้ใส่ Collider2D เข้ามา กำหนดพื้นที่ให้ตัวละครเดินได้ ไปมาตามภาพ

สร้างชุด Animation ของ Player โดย Sprite Editor แบบ Slice 135×135(แล้วแต่ภาพของแต่ละคน) คือท่า Idle และ ท่า Run วิธีการย้อนหลังที่ : Unity2D การนำ Sprite Sheets ไปสร้าง Animation ในเกม

ทำการออกแบบ Animator Controller ตามนี้โดยใช้ Parameter ทั้งหมด 2 ตัวคือ Speed เป็น Float และ Grounded เป็น bool

เส้น Transition ที่โยงจาก Idle ไปที่ Run ให้กำหนดตามนี้:

กำหนดให้ Grounded เป็น true ส่วน Speed ถ้ามากกว่า 0.1 ให้วิ่ง ส่วนเส้นของ Run กลับไปที่ Idle ให้กำหนดตามนี้:

ต่อมาให้ดาวน์โหลดและติดตั้ง Mirror Assets ครับดาวน์โหลดที่: Mirror | Network | Unity Asset Store

เมื่อ Import แล้วให้ทำการ Restart Editor ของ Unity รอบหนึ่งให้มัน Compile Script รอบหนึ่งก่อน หลังจากนั้นให้ไปที่ Player ของเรา เพิ่ม Component ต่อไปนี้ครับ:
ใส่ RigidBody2D ลงไป และ BoxCollider2D แค่ต้อง Edit Collider เล็กน้อยให้พอดีตัวของตัวละคร

เพิ่ม Component เข้าไปคือ Network -> Network Identity, Network -> Network Animator และ Network->Network Transform โดยทั้งหมดต้องใส่ Animator ลากตัวมันเองไปวางใน Network Animator และคลิก เครื่องหมายถูกที่ Client Authority ทั้งหมด

สร้าง Script Player ขึ้นมาแล้วใส่ Code ต่อไปนี้ครับ:
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using Mirror;
public class Player : NetworkBehaviour
{
[SerializeField]
public float Speed, maxSpeed, horizontal;
public bool grounded;
Physics2D physics2D;
Animator animator;
void Start()
{
animator = this.gameObject.GetComponent<Animator>();
}
// Update is called once per frame
void Update()
{
if (this.isLocalPlayer)
{
horizontal = Input.GetAxis("Horizontal");
animator.SetBool("Grounded", true);
animator.SetFloat("Speed", Mathf.Abs(horizontal));
if (horizontal < -0.1f)
{
transform.Translate(Vector2.right * Speed * Time.deltaTime);
transform.eulerAngles = new Vector2(0, 180);
}
else if (horizontal > 0.1f)
{
transform.Translate(Vector2.right * Speed * Time.deltaTime);
transform.eulerAngles = new Vector2(0, 0);
}
}
}
}
จะเห็นว่าเราเพิ่ม
using Mirror;
เพื่อให้ทำงานส่วนของคำสั่งใน Mirror ได้ และเปลี่ยน MonoBehavior เป็น NetworkBehavior
public class Player : NetworkBehaviour
ส่วนของ Update() เราได้เช็คส่วนของ isLocalPlayer ของ NetworkBehavior มาใช้
if (this.isLocalPlayer)
{
}
ทำการ Clone ตัว Player ของเราไปเป็น Prefab ครับ
สร้าง Empty GameObject ขึ้นมาตั้งชื่อว่า GameController แล้วใส่ Component ของ
- Network -> Network Manager
- Network -> Network ManagerHUD

เปิด Network Manager ขึ้นมาลาก Player จาก Prefab ไปวางที่ Player Prefab

ทำการ Build ExE แล้วรันเปิดเป็น Server 1 เครื่อง นอกนั้น Client ครับ แล้วเล่นได้เลย

ก็ประมาณนี้ครับ ตัวอย่างแรก ดูคลิปได้นะ:




