Game DevelopmentUnity2D

สร้างเกม 2 มิติแบบ Multiplayer บน Unity ด้วย Mirror

มาสร้างเกม Multiplayer แบบ 2 มิติง่ายๆ บน Unity โดยใช้ Asset ชื่อว่า Mirror ทำเกมเล่นบน Network กัน

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

เริ่มต้นให้ทำการ Create Project ขึ้นมาใหม่ผ่าน Unity Hub ครับ

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

Top game assets – itch.io

ก็ได้ ใช้ของเหล่านี้ครับ

ทำการจัด 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 ครับ แล้วเล่นได้เลย

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

Asst. Prof. Banyapon Poolsawas

อาจารย์ประจำสาขาวิชาการออกแบบเชิงโต้ตอบ และการพัฒนาเกม วิทยาลัยครีเอทีฟดีไซน์ & เอ็นเตอร์เทนเมนต์เทคโนโลยี มหาวิทยาลัยธุรกิจบัณฑิตย์ ผู้ก่อตั้ง บริษัท Daydev Co., Ltd, (เดย์เดฟ จำกัด)

Related Articles

Back to top button

Adblock Detected

เราตรวจพบว่าคุณใช้ Adblock บนบราวเซอร์ของคุณ,กรุณาปิดระบบ Adblock ก่อนเข้าอ่าน Content ของเรานะครับ, ถือว่าช่วยเหลือกัน