Unity 3DVirtual Reality

การสร้างระบบปืนใน VR ด้วย Oculus Integration และ Unity

บทเรียนการสร้างระบบยิงปืนใน VR ด้วย Unity ร่วมกับ Oculus Integration ด้วยภาษา C# และ OVR ทดสอบผ่านอุปกรณ์ Oculus Quest Headset เพื่อต่อยอดในการสร้างเกม VR สำหรับผู้ที่สนใจ

ก่อนเริ่มต้นบทเรียนนี้ รบกวนศึกษาชุดพัฒนาที่: Oculus Integration บน Unity สร้างเกม VR

ถ้าพูดว่าเกมสไตล์ไหนที่เล่นง่ายเขียนง่ายบน VR ก็คงต้องตอบว่า Shooting Arcade หรือเกมยิง เรามาดูกันดีกว่าว่าถ้าเราจะสร้างเกมยิงเกมหนึ่งใน VR นั้นยากไหม

ให้เริ่มต้น ตามบทความ Oculus Integration บน Unity สร้างเกม VR ให้เรียบร้อยหลังจากนั้นก็เปิด Scene Editor ขึ้นมา ตัวอย่างใช้

ทำการ Import Assets ของ Oculus Integration พระเอกของเราลงไป

รอจน Initial Project จนพร้อมระหว่างนี้เราไปหา Asset ของปืนมาไว้ใช้หน่อยดีกว่า ว่าเราจะทำเกมยิงอะไร ปืนแบบไหนก็เอาที่สบายใจจะหามานะครับ ในตัวอย่างก็ตัวนี้:

หลังจากนั้นสร้าง Scene ใหม่ลาก Prefabs ชื่อ OVRPlayerController จาก Folder ชื่อ Assets->Oculus->VR->Prefabs ไปวางไว้ที่ Hierarchy ให้เรียบร้อย

สร้าง Plane ไว้ วางแกนของ OVRPlayerController ให้ค่า y เป็น 1 หลังจากนั้นดู child ของเจ้า OVRPlayerController ส่วนของ TrackingSpace ให้เอา Prefabs หรือ โมเดลของ Hand Gun ของเราไปวางที่ LeftHandAnchor และ RightHandAnchor เสียตามตัวอย่าง

ปรับสเกลให้พอเหมาะ เราจะเห็นว่าถ้าเรา Build & Run ตัว Oculus Quest ของเรา ปืนจะติดที่มือของเราเป็นที่เรียบร้อย

กลับมาที่ Editor ของ Unity ให้สร้าง Empty GameObject ขึ้นมาเปลี่ยนชื่อเป็น “Gun” แล้ววางแกน Z สีน้ำเงินไปที่ปลายกระบอกปืน:

ใน GameObject ตัว Gun นั้นให้สร้าง Script ต่อไปนี้ ชื่อ GunInput.cs ใส่ Code ดังนี้:

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using OVR;

public class GunInput : MonoBehaviour
{
    public float fireRate = 0.4f;
	private float nextFire = 0.0f;

    public GameObject bullet,gun;

    void Update()
    {
        if(OVRInput.Get(OVRInput.Button.PrimaryIndexTrigger) && Time.time > nextFire){
            nextFire = Time.time + fireRate;
            Fire();
        }
    }

    public void Fire(){
        Instantiate(bullet, transform.position, transform.rotation);
    }
}

เราจะหน่วงเวลากด OVRInput ปุ่ม Trigger สัก 0.4f เพื่อไม่ให้กดค้างเป็นยิงรัวนะครับ

ขั้นตอนต่อมาสร้าง Bullet ขึ้นมา ปรับค่า Collision ใส่ IsTrigger เป็น True หลังจากนั้นสร้าง Script ชื่อ Bullet.cs

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class Bullet : MonoBehaviour
{
    float Speed = 0.7f;
	float SecondsUntilDestroy = 1.2f;
	float startTime;
 
	// Use this for initialization
	void Start () {
		startTime = Time.time;
	}
	void FixedUpdate(){
		this.gameObject.transform.position += Speed * this.gameObject.transform.forward;
		if (Time.time - startTime >= SecondsUntilDestroy) {
			Destroy(this.gameObject);
		}
	}
 
	void OnTriggerEnter(Collider collision){
		if(collision.gameObject.tag == "Enemy"){
			Destroy(this.gameObject);
		}
	}
}

ลาก Bullet ที่สร้างแล้วไปเป็น Prefabs สร้างโฟลเดอร์ชื่อ Prefabs ขึ้นมาหลังจากนั้นลากไปวาง กลับไปที่ GameObject ของ Gun ลาก Prefab ของ Bullet ไปวางใน Component ของ Gun ดังนี้

ปรับเป็นปุ่มมือซ้าย ขวาเป็น L Touch, R Touch แล้วลอง Build ลง HeadSet ตัว Oculus Quest

ทดสอบ แล้วจะเห็นว่าเราสร้างเกมยิงปืนใน VR ได้แล้ว บทเรียนต่อไปจะสร้าง Muzzles ของปืน (ประกายไฟ) และ ระบบ AI ของศัตรูเดินเข้ามาหาเราครับ รอติดตามกัน

Asst. Prof. Banyapon Poolsawas

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

Related Articles

Back to top button

Adblock Detected

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