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
Game & Mobile Development AR VR XR
Privacy Overview

This website uses cookies so that we can provide you with the best user experience possible. Cookie information is stored in your browser and performs functions such as recognising you when you return to our website and helping our team to understand which sections of the website you find most interesting and useful.

Adblock Detected

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