Game DevelopmentUnity 3DVirtual Reality

Labs: การสร้าง VR Entertainment บน Unity แบบทุนต่ำ

หลังจากที่เคยอัพเด็ตส่วนของการสร้าง VR หรือ Virtual Reality บน Unity และทำงานผ่าน Google Cardboard วันนี้เราจะมาทำ VR Entertainment บน Unity แบบทุนต่ำ ด้วย Fibrum SDK กัน

ทำไมรอบนี้ถึงเลือก Fibrum SDK แทน Cardboard SDK ในการทำงานบน Unity 3D ?

จริงๆ ไม่มีอะไรครับ เพราะเครื่องที่ทดสอบใช้ VR กับ Cardboard ที่รองรับมีอยู่จำกัดและสเปคสูงพอตัว และต้องใช้ Gyro ในการควบคุมมุมสำหรับหมุนแกนของระดับสายตา ก็เลยไปหา VR มาหลายๆ ตัวที่เข้าตาและใช้ได้ก็ Fibrum และ DiveSDK ที่รองรับ เครื่องรุ่นต่ำราคาถูกให้พอใช้งานได้ประมาณนึง (แค่จะขึ้น ข้อความเตือนว่า No Gyro สีแดงกวนเล็กน้อย) เครื่องที่ทดสอบคือ Samsung Galaxy J7, Oppo A33W ที่ไม่มีระบบ Gyro แต่ราคา 5,000 กว่าบาทที่ต้องการเล่น VR ได้ (เพราะแค่โหลด Google Cardboard SDK ก็โดนแจ้งว่าติดตั้งไม่ได้แล้ว) ส่วน เครื่องแพงๆ หรือ iOS รุ่น iPhone5S เป็นต้นไปไม่มีปัญหา ใช้ Library หรือ SDK ไหนก็ได้เลย

ทางเลือกของ Labs นี้ที่ลองดูคือ Fibrum ครับ

http://fibrum.com/

เว็บไซต์ Fibrum.com
เว็บไซต์ Fibrum.com

ตัว Fibrum เองก็มี Gear ของตัวเองนะครับ และมีแอพพลิเคชันปรากฏอยู่ประมาณนึง

Fibrum Gear
Fibrum Gear

ทีนี้เราจะมาสร้าง Entertainment Complex แบบ VR ที่ใช้ทุนต่ำกันหน่อยดีกว่า!

ให้เปิด Project ของ Unity แบบ 3D ขึ้นมารอไว้ครับ

เปิด Project ใหม่
เปิด Project ใหม่

ไปที่เว็บไซต์ fibrum.com ดาวน์โหลด SDK สำหรับ Unity มาไว้ในเครื่องคอมพิวเตอร์

Screen Shot 2016-06-14 at 3.06.22 PM

ดาวน์โหลดที่ SDK เป็นอันเสร็จ

Screen Shot 2016-06-14 at 3.08.42 PM

ออกแบบฉากบน Plane ตามทฤษฏี Level Design มาให้พร้อมด้วย Asset ทั้งจากทำเองหรือไม่ทำเองก็ได้ครับ ตกแต่งให้เสร็จสรรพ

ออกแบบฉาก Level Design
ออกแบบฉาก Level Design

ไปที่เมนู Assets -> Import Package -> Custom Package…

Screen Shot 2016-06-14 at 3.11.15 PM

เลือกไฟล์ fibrum SDK ทำการ Import เข้า Project เป็นอันเสร็จครับ เราจะมี Prefab พร้อมใช้อยู่แล้ว

Screen Shot 2016-06-14 at 3.12.30 PM

สิ่งที่เราจะใช้คือ Joystick_simple_FPS_Camera เป็น Prefab หลักในการวางลงไปในฉากของเราจะเป็นการจำลอง Player FPS และ กล้อง VR ทันที

Screen Shot 2016-06-14 at 3.13.50 PM

ทดสอบโดยการ เปิด Play Mode แล้วใช้ Mouse Control มุมกล้อง มุมมอง คลิกเมาส์จะมีกระสุนเป็น Sphere (Clone) เด้งออกจากเราไปข้างหน้าให้พร้อม

มองลงพื้น
มองลงพื้น

ให้เราสร้าง ศัตรูของเราขึ้นมาใส่ Collider ให้เสร็จสรรพ สร้างไฟล์ชื่อ monster.cs ให้เรียบร้อย

ตั้งค่า Monster ของเราเป้นต้นแบบใส่ Animator ให้เสร็จ
ตั้งค่า Monster ของเราเป้นต้นแบบใส่ Animator ให้เสร็จ
using UnityEngine;
using System.Collections;

public class Monster : MonoBehaviour {
    public float objectSpeed = 0.003f;
    public ParticleEmitter ClearBullets;
        // Use this for initialization
        void Start () {
        }
        // Update is called once per frame
        void Update () {
            transform.Translate(0, 0, objectSpeed);
        }
        void OnTriggerEnter(Collider other)
        {
            if(other.gameObject.name == "Sphere(Clone)")
            {
                Instantiate(ClearBullets, transform.position, transform.rotation);
                Destroy(other.gameObject);
                Destroy(gameObject);
            }
    }
}

เป็นการเช็คให้ ศัตรูของเราวิ่งเข้ามาหา และเมื่อ Monster หรือศัตรูโดน GameObject ชื่อ Sphere(Clone) ก็จะระเบิด

void OnTriggerEnter(Collider other)
        {
            if(other.gameObject.name == "Sphere(Clone)")
            {
                Instantiate(ClearBullets, transform.position, transform.rotation);
                Destroy(other.gameObject);
                Destroy(gameObject);
            }
    }

โดยระเบิกใช้ SimpleParticle Pack เป็น Asset ง่ายๆ ไปโหลดมาครับ

Instantiate(ClearBullets, transform.position, transform.rotation);

หลังจากเสร็จแล้วให้ทำการ Clone ตัว monster เป็น Prefabs แล้วลบต้นแบบทิ้งซะ เราจะมาสร้าง DynamicPrefab เป็นจุดปล่อยให้ศัตรูวิ่งไปมาในฉาก ตามเวลาที่กำหนดก็จะออกมาเรื่อยๆ ให้สร้างไฟล์ DynamicPrefab.cs

using UnityEngine;
using System.Collections;

public class DynamicPrefab : MonoBehaviour {
    public GameObject monster;
        public GameObject items;

        float timeElapsed = 0;
        float ItemCycle = 3f;
        bool ItemPowerup = true;

        // Use this for initialization
        void Start () {

        }

        // Update is called once per frame
        void Update () {
            timeElapsed += Time.deltaTime;
            if(timeElapsed > ItemCycle)
            {
                GameObject temp;
                if(ItemPowerup)
                {
                    temp = (GameObject)Instantiate(items);
                    Vector3 pos = temp.transform.position;
                    temp.transform.position = new Vector3(Random.Range(-3, 4), pos.y, pos.z);
                }
                else
                {
                    temp = (GameObject)Instantiate(monster);
                    Vector3 pos = temp.transform.position;
                    temp.transform.position = new Vector3(Random.Range(-3, 4), pos.y, pos.z);
                }

                timeElapsed -= ItemCycle;
                ItemPowerup = !ItemPowerup;
            }
        }
}

จริงๆ เป็น Code เก่าโบล่ำโบราณมาใช้นั่นแหละ สร้าง Empty Game Object ขึ้นมาแล้ว ใส่ DynamicPrefab.cs เข้าไปแล้ว ลาก Monster Prefab ไปวางใน ช่อง Public ซะตามรูป

Screen Shot 2016-06-14 at 3.22.24 PM

หลังจากนั้นสร้างฟังก์ชัน Clear GameObject เมื่อมีการระเบิด ด้วยไฟล์ clear.cs วางใน Effect ระเบิด (ศึกษาเพิ่มเอง)

using UnityEngine;
using System.Collections;

public class Clear : MonoBehaviour {
    float SecondsUntilDestroy = 1.2f;
    float startTime;
    void Start () {
        startTime = Time.time;
    }
    // Update is called once per frame
    void Update () {
        if (Time.time - startTime >= SecondsUntilDestroy) {
            Destroy(this.gameObject);
        }
    }
}

เมื่อพร้อมแล้วก็มาเล่นกันครับ ให้ทำการ Build เป็น APK ลง Android แล้วไปเล่นกับ Cardboard

Screen Shot 2016-06-14 at 3.35.00 PM

Build Apk ของ Android แล้วไปใช้งานกับ Google CardBoard ซะ

เสียบ Cardboard
เสียบ Cardboard

จะเห็นว่า มันเดินไม่ได้ มันหมุนได้อย่างเดียว  ทำไงดีศัตรูวิ่งเข้ามา ทางออกของการทำ entertainment complex บน VR วันนี้คือการใช้ อุปกรณ์ทุนต่ำครับ นั่นคือ

  • OTA USB สำหรับ Android
  • USB Mouse หรือ USB Wireless Mouse (สำหรับคลิกแล้วยิง แต่จะเดินไม่ได้)
  • USB Joystick (สำหรับกดแล้วยิง และเดินไปมาได้)

นึกภาพไม่ออกก็คือสายนี้

Q3343p1

และเมื่อประกอบก็จะเป็นแบบนี้

Screen Shot 2016-06-14 at 3.28.46 PM

เสียบ OTA เปิด OTA Mode ใน Developer ของเครื่องโทรศัพท์ Android ทำการ Build APK เสียบลง Google Cardboard ใส่หูฟัง(ถ้ามีเสียง) เราก็จะได้ Low Cost Entertainment VR Complex ที่ทำได้ง่ายๆ แล้ว (อยู่ที่ ไอเดียล้วนๆ)

สร้าง VR Entertainment Complex แบบ Low cost ด้วย Unity3D และ Fibrum
สร้าง VR Entertainment Complex แบบ Low cost ด้วย Unity3D และ Fibrum

รีวิวเกมบน Unity

ว่างๆจะทำ คลิปรีวิวเล่นจริงกับ นักศึกษา สาขาการออกแบบเชิงโต้ตอบและการพัฒนาเกม คณะเทคโนโลสารสนเทศ มหาวิทยาลัยธุรกิจบัณฑิตย์ ให้ดูนะครับ

ระหว่างนี้ลองเริ่มต้นทำดูจะรู้ว่ามันง่ายมากๆ

Asst. Prof. Banyapon Poolsawas

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

Related Articles

Back to top button

Adblock Detected

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