Hi Developer,
Tahun ini Samsung telah merilis Gear VR 2017 yang dilengkapi dengan Controller. Gear VR tersebut telah banyak perbaikan dari versi sebelumnya. Selain menambahkan Controller untuk menambah experience dalam bermain, terdapat juga lensa yang lebih besar sehingga lebih nyaman di mata. Disisi lain, perbaikan pada lubang bawah lensa sehingga lensa tidak mudah berkabut atau menguap sehingga menganggu saat anda bermain dalam waktu yang lama. Kemudian, untuk koneksi ke device, Gear VR 2017 dilengkapi dengan USB micro dan USB Type-C yang mendukung Samsung Galaxy S7, Samsung Galaxy S7 Edge, Samsung Galaxy Note 5, Samsung Galaxy S6, Samsung Galaxy S6 Edge, Samsung Galaxy S6 Edge+ dan yang terbaru Samsung Galaxy S8 dan Samsung Galaxy S8+.
Semua fungsi tombol dan touchpad pada Gear VR juga terdapat di Controller. Ada beberapa penambahan fitur yang tidak ada di Gear VR seperti sensor gyroscope tambahan dan tombol trigger (seperti tombol pistol) sehingga memudahkan developer untuk memberikan experience baru pada pengguna dalam bermain atau berinteraksi.
đź’» Mulai Belajar Pemrograman
Belajar pemrograman di Dicoding Academy dan mulai perjalanan Anda sebagai developer profesional.
Daftar SekarangSaat ini sudah lebih dari 700 aplikasi/game yang tersedia di Oculus Store yang siap memanjakan pengguna. Samsung Indonesia juga menantang developer Indonesia untuk membangun sebuah aplikasi/Game melalui Challenge berikut :
Indonesia Next Apps 4.0 – Gear VR Challenge
Pada artikel ini akan dijelaskan cara membangun game sederhana dengan menggunakan Gear VR dan Controller melalui contoh project di Unity.
Â
Hal yang akan Dibahas di Materi ini
Tema game yang akan dipelajari di artikel ini adalah StarWars, dengan memanfaatkan Controller sebagai Pedang atau Laser.
Ilustrasi: http://www.starwars.com/news/its-true-all-of-it-star-wars-the-force-awakens-is-coming-home
Kita akan membuat gameplay yang sederhana, yaitu menghancurkan asteroid dengan klik tombol trigger dan menggerakkan Controller ke arah asteroid.
Â
Tool yang Dibutuhkan
Tool yang digunakan dalam materi ini yaitu Unity 5.6.3 yang dapat diunduh pada link berikut:
https://unity3d.com/get-unity/download/archive
Anda juga dapat menggunakan versi sebelumnya dengan batasan versi sebagai berikut:
- Unity 5.6 – Minimal Unity 5.6.0f3 atau lebih baru
- Unity 5.5 – Minimal Unity 5.5.2p3 atau lebih baru
- Unity 5.4 – Minimal Unity 5.4.5f1 atau lebih baru
- Unity 4 – Minimal Unity 4.7.0f1 (legacy support only)
Â
Pengenalan Gear VR dan Controller
Sebelum membahas menggunakan Gear VR dan Controller, Kita akan membahas kontrol yang terdapat di Gear VR 2017 berikut Controllernya.Gear VR memiliki Tombol Home, Back dan Volume. Selain memiliki tombol, juga dilengkapi dengan touchpad yang berfungsi untuk gesture swipe, dan juga berfungsi untuk klik. Di dalam board juga terdapat sensor gyroscope, accelerometer, dan sensor magnetik sehingga ketika disambungkan dengan Device maka secara otomatis sensor yang digunakan adalah sensor yang terdapat di Gear VR.
Sedangkan pada Controller memiliki 5 tombol (home, back, trigger, dan 2 tombol volume), 1 touchpad (juga dapat berfungsi sebagai tombol), dan di dalamnya juga terdapat sensor gyroscope, accelerometer, dan sensor magnetik yang berfungsi untuk mengetahui rotasi pada Controller. Untuk power, Controller menggunakan 2 buah baterai AAA yang mampu bertahan selama 80 jam hingga 40 hari.
Â
Menyiapkan Project Sederhana
Pertama-tama kita akan menyiapkan project yang nantinya akan dijadikan Game VR. Buat Project Unity Baru dengan nama GearVRController dengan mode 3D dengan contoh di bawah ini:
Setelah Project baru, unduh package SampleProjectLazer.packageunity. Kemudian import dengan cara klik menu Assets > pilih Import Package > pilih Custom Package.. Kemudian masukkan file package yang telah diunduh. Setelah semua berhasil di-import, kemudian buka Folder Scenes kemudian klik 2x LaserShooter.unity
Kemudian jalankan dengan hasil seperti berikut:
Ketika kondisi klik kiri pada mouse, maka laser akan mengganti warna menjadi merah dan jika tekan Space maka laser akan mati. Dari Project tersebut, kita kembangkan lagi dengan memadukan Controller pada Gear VR, sehingga seolah-olah laser tersebut keluar dari Controller.
Â
Mengimplementasikan dengan Gear VR dan Controller
Dari Asset Project yang sudah diunduh, nanti laser akan dikontrol oleh Controller pada Gear VR. Hal yang pertama dilakukan adalah unduh Package Oculus Utilities for Unity 5 di bawah ini:https://developer.oculus.com/downloads/package/oculus-utilities-for-unity-5/
Kemudian extract file yang telah diunduh. Import ke project dengan klik menu Assets > pilih Import Package > pilih Custom Package.. dan cari file OculusUtilities.unitypackage sehingga nampak seperti berikut:
Pada panel Hierarchy, hapus GameObject Camera dan Laser. Setelah itu akan diganti dengan Camera dari OVRCameraRig dan Laser yang akan menjadi bagian dari Controller dengan menggunakan prefab Laser. Langkah selanjutnya kita akan menggunakan prefabs dari OVR dengan buka folder Assets / OVR / Prefabs maka akan terlihat beberapa prefab.
Di dalam folder prefabs terdapat 5 prefab, yang terdiri:
- Cursor_Timer, Digunakan oleh sistem ketika sedang menunggu untuk kembali ke Store Oculus dan Cursor pada Touchpad Gear VR.
- GearVRController, Digunakan sebagai controller pada Gear VR jika menggunakan Device Controller.
- OVRCameraRig, Digunakan untuk sebagai Camera Gear VR.
- OVRCubemapCaptureProbe, Digunakan untuk mengambil gambar dengan 6 posisi, depan, belakang, atas, bawah, kanan dan kiri dengan menggunakan tombol F8 (Default) pada keyboard.
- OVRPlayerController, Digunakan untuk sebagai Player yang dapat digerak dengan menggunakan tombol panah atau tombol A,S,W dan D pada keyboard.
Selanjutnya Drag OVRCameraRig ke panel Hierarchy.
Di dalam GameObject OVRCameraRig terdapat TrackingSpace, dan di dalam TrackingSpace terdapat 6 GameObject sebagai berikut:
- LeftEyeAnchor, Camera yang digunakan untuk pandangan mata kiri.
- CenterEyeAnchor, Camera yang bersifat fokus yang dapat digunakan untuk menampilkan UI (Render Mode pada Canvas harus diset World Space )
- RightEyeAnchor, Camera yang digunakan untuk pandangan mata kanan.
- TrackerAnchor, Digunakan untuk mengetahui posisi Camera
- LeftHandAnchor, Digunakan untuk Controller pada tangan kiri.
- RightHandAnchor, Digunakan untuk Controller pada tangan kanan.
Kemudian masukkan dengan drag prefab GearVRController ke GameObject LeftHandAnchor dan ke GameObject RightHandAnchor pada panel Hierarchy.Di dalam GearVrController terdapat GameObject Model yang berbentuk object Controller sehingga Anda tidak perlu membuat object 3D Controller sendiri.
Kemudian atur konfigurasi Inspector GearVRController dengan set Controller menjadi R Tracked Remote yang berada di dalam RightHandAchor di panel Hierarchy sebagai berikut:Atur juga pada GearVRController yang berada di dalam LeftHandAnchor dengan Set Controller menjadi L Tracked Remote.
Kemudian pada kedua GameObject Model di panel Hierarchy, masukkan dengan drag prefab Laser yang berada di folder Assets/Prefabs ke GameObject Model.
Kemudian ubah kontrol dari Keyboard menjadi Controller dengan mengubah script Laser.cs yang berada di dalam file Assets/Scripts. Kita akan menggunakan tombol Trigger sebagai ganti warna dan fitur klik pada touchpad di Controller sebagai mematikan laser. Sehingga Anda perlu ubah pada script Laser.cs pada baris 17 dan 26 menjadi sebagai berikut:OVRInput.Get(OVRInput.RawButton.A), memberikan nilai benar selama menekan tombol trigger. Sedangkan untuk OVRInput.Get(OVRInput.Button.One), memberi nilai benar selama menekan touchpad yang terdapat di Controller.
Sehingga keseluruhan Script Laser.cs seperti berikut:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 |
using UnityEngine; public class Laser : MonoBehaviour{ private LineRenderer laser; bool isGreen = false; // Use this for initialization void Start(){ laser = GetComponent<LineRenderer>(); transform.localScale = new Vector3(); } // Update is called once per frame void Update(){ if (OVRInput.Get(OVRInput.RawButton.A)) { ChangeColor(false); } else { ChangeColor(true); } if (OVRInput.Get(OVRInput.Button.One)) { LaserOff(); } else { ShootLaser(); } } public void ChangeColor(bool isGreen){ this.isGreen = isGreen; Color c = isGreen ? Color.green : Color.white; laser.startColor = c; } void LaserOff(){ laser.SetPosition(0, transform.position); laser.SetPosition(1, transform.position); } void ShootLaser(){ laser.SetPosition(0, transform.position); RaycastHit hit; if (Physics.Raycast(transform.position, transform.forward, out hit)) { if (hit.collider) { laser.SetPosition(1, hit.point); if (!isGreen) Destroy(hit.transform.gameObject); } } else { laser.SetPosition(1, transform.forward * 5000); } } } |
Â
Code di atas kita hanya menggunakan 2 inputan dari Controller. Anda dapat menggunakan inputan yang lain sebagai berikut:
1 2 3 |
bool a = OVRInput.Get(OVRInput.RawButton.A); bool aDown = OVRInput.GetDown(OVRInput.RawButton.A); bool aUp = OVRInput.GetUp(OVRInput.RawButton.A); |
Selain menggunakan OVRInput.RawButton.A, Anda juga dapat menggunakan OVRInput.Button.PrimaryIndexTrigger
Nilai di atas merupakan nilai boolean ketika tekan tombol depan/trigger pada Controller. Nilai tersebut sering digunakan untuk kendali tembak pada suatu permainan.
Ada 3 kondisi ketika tombol di klik, antara lain:
- Get(), dijalankan selama tombol ditekan.
- GetDown(), dijalankan ketika tombol ditekan pertama kali dan hanya dijalankan sekali.
- GetUP(), dijalankan ketika tombol dilepas dan hanya dijalankan sekali.
1 |
Quaternion rot = OVRInput.GetLocalControllerRotation(OVRInput.GetActiveController()); |
Nilai di atas merupakan nilai Rotasi pada Controller. Anda akan menggunakan value ini ketika menggerakkan object dengan posisi jauh dari posisi controller. Misalnya ketika kita menggerakkan pesawat.
1 |
Vector3 pos = OVRInput.GetLocalControllerPosition(OVRInput.GetActiveController()); |
Nilai di atas merupakan nilai posisi pada Controller yang terdiri nilai x, y dan z. Digunakan untuk mengetahui posisi Controller saat digerakkan.
1 |
Vector2 primaryTouchpad = OVRInput.Get(OVRInput.Axis2D.PrimaryTouchpad); |
Nilai di atas merupakan nilai posisi jari dari touchpad Controller dan touchpad gearVR. Nilai titik tengah berada pada posisi 0,0 dengan batas dari -1 sampai 1. Value ini digunakan untuk kontrol Analog misal digunakan untuk menggerakkan player/karakter.
Untuk mendapatkan nilai boolean dari gesture touchpad Controller dan Gear VR. Ada 4 Nilai, yaitu ke atas, bawah, kiri dan kanan.
1 2 |
bool up = OVRInput.Get(OVRInput.Button.Up); bool down = OVRInput.Get(OVRInput.Button.Down); |
Nilai up digunakan untuk scroll keatas, sedangkan untuk down digunakan untuk scroll kebawah.
1 2 |
bool left = OVRInput.Get(OVRInput.Button.Left); bool right = OVRInput.Get(OVRInput.Button.Right); |
Nilai left sering digunakan untuk membuka halaman ke kiri, sedangkan nilai right digunakan untuk pindah halaman ke kanan.
1 2 3 |
bool primaryTouchpad = OVRInput.Get(OVRInput.Touch.PrimaryTouchpad); bool primaryTouchpadDown = OVRInput.GetDown(OVRInput.Touch.PrimaryTouchpad); bool primaryTouchpadUp = OVRInput.GetUp(OVRInput.Touch.PrimaryTouchpad); |
Nilai di atas merupakan nilai boolean sentuh pada touchpad Controller dan touchpad Gear VR.
Di permainan, ini sering digunakan untuk fokus area yang dipilih tetapi belum masuk ke area tersebut.
1 2 3 |
bool back = OVRInput.Get(OVRInput.RawButton.Back); bool backDown = OVRInput.GetDown(OVRInput.RawButton.Back); bool backUp = OVRInput.GetUp(OVRInput.RawButton.Back); |
Selain menggunakan OVRInput.RawButton.Back, kamu juga menggunakan OVRInput.Button.Two
Nilai di atas merupakan nilai boolean tombol back pada Controller dan tombol back pada gearVR. Nilai di atas sering digunakan untuk kembali ke halaman utama atau keluar dari sebuah gameplay pada sebuah game. Jika tahan tombol back dengan lama, maka akan kembali ke halaman Oculus Store.
1 2 3 |
bool one = OVRInput.Get(OVRInput.Button.One); bool oneDown = OVRInput.GetDown(OVRInput.Button.One); bool oneUp = OVRInput.GetUp(OVRInput.Button.One); |
Selain menggunakan OVRInput.Button.One , kamu juga menggunakan OVRInput.Button.PrimaryTouchpad dan OVRInput.RawButton.Start
Nilai di atas merupakan nilai boolean ketika Anda klik pada touchpad Gear VR dan klik pada touchpad Controller. Nilai di atas digunakan untuk memulai sebuah permainan atau masuk dari pilihan menu yang dipilih.
Â
Konfigurasi Setup Android
Untuk membuat file Apk, Unity yang Anda gunakan harus terintegrasikan dengan SDK dan JDK untuk membuat Apk yang beraksitektur ARM, sedangkan NDK digunakan untuk compile Apk yang berarsitektur x86. Untuk mengaturnya, Anda dapat melakukan dengan klik menu Edit > Pilih Preferences.. > Ketika muncul jendela Unity Preferences > buka tab External Tools.Tentukan lokasi SDK, JDK dan NDK dengan tekan tombol Browser. Jika belum install sebelumnya, maka Anda dapat klik tombol Download untuk mengunduh tools tersebut. Langkah ini hanya dilakukan sekali saja.
Â
Menambahkan Oculus Signature File (Osig)
Jika ingin mencoba game Anda ke Device, maka terlebih dahulu membuat file Osig dengan memasukkan Device ID.
Buka laman Oculus Signature File (osig) Generator
Untuk mendapatkan Device ID, Anda dapat menggunakan Device Id Fetch di Device Android atau Anda juga bisa menggunakan adb dengan membuka CMD (Command Prompt) masuk ke directory platform-tools pada Android SDK dengan menulis command berikut :
cd <Lokasi sdk Android>\platform-tools <Enter>
Untuk menampilkan id device, tulis:
adb devices <Enter>
Kemudian unduh file Osig dengan klik Download File, setelah itu masukkan file tersebut ke Project Unity pada folder Assets/Plugins/Android/assets dengan hasil sebagai berikut:Lokasi folder harus sesuai seperti di atas dan Anda dapat memasukkan file tersebut dengan klik kanan pada panel Project > kemudian pilih Show in Explorer. Salinlah file Osig ke folder tersebut.
Â
Membuat APK dan Menginstall ke Device
Setelah Game selesai dan setelah memasukkan Osig, maka selanjutnya mengatur Build setting dengan klik menu File > Kemudian pilih Build Settings… Kemudian Switch ke Platform Android dengan klik tombol Switch Platform dan jangan lupa untuk memasukkan Scene ke Scenes In Build.
Kemudian Masuk ke Player Settings….Lalu centang pada Virtual Reality Supported dan Masukkan SDK Oculus.
Aturlah Package Name dan Minimum API Level dengan minimal Android 4.4 Kit Kat (API level 19) dengan contoh dibawah ini:
Aplikasi yang dimasukkan harus Signed sehingga Anda harus memasukkan Keystore Anda. Anda dapat menggunakan Keystore yang sudah ada dengan centang Use Existing Keystore. Sedangkan jika Anda belum memiliki Keystore, maka centang Create a new keystore. Pastikan Anda untuk mengingat password keystore dan password key Anda.Setelah selesai melakukan konfigurasi Player Settings.. Maka selanjutnya kembali ke jendela Build Settings. Klik Build untuk membuat file apk dan klik Build Run untuk membuat file apk sekaligus menginstall di device.
Â
Menjalankan Project di Gear VR
Ketika pertama kali akan menyambungkan device ke Gear VR, maka Anda harus menginstall Oculus Store. Kemudian mengkoneksikan dengan Controller dengan via Bluetooth.
Ketika Pertama kali membuat Game Gear VR, maka muncul gambar seperti di bawah ini:
Masukkan Device Android ke Gear VR dan Klik tombol Home pada Controller untuk memunculkan Controller di Game.
Jika Anda klik touchpad pada Controller maka Laser akan mati, sedangkan jika Anda klik Tombol Trigger maka Laser akan berganti menjadi warna merah dari sebelumnya berwarna hijau. Asteroid akan hancur ketika terkena laser warna merah. Jika Controller tidak tampil dan sebelumnya sudah sukses di-pairing maka Anda dapat menghidupkan dengan klik tahan tombol Home pada Controller.
Â
Untuk Sample Project di atas, Anda dapat unduh di link berikut : GearVRController.zip
Â
Agar lebih menarik, Anda dapat menambahkan efek ledakan, menghitung skor dan menambah level baru.
Untuk Anda yang ingin mencoba game buatan Anda dengan device Samsung Galaxy S8 dan Gear VR 2017 with Controller, Anda dapat menghubungi Samsung INA 4.0 Local Community Officer yang tersedia kota Anda tanpa dipungut biaya.
Jika Anda ingin mempelajari lebih jauh mengenai game 2d dan 3d, anda dapat mengikuti Kelas Belajar Membangun Game 2D dan 3D dengan Unity yang dapat diikuti secara gratis.
Referensi:
- https://www.dicoding.com/academies/39
- https://www.dicoding.com/challenges/256
- https://www.oculus.com/gear-vr/
- http://www.samsung.com/global/galaxy/galaxy-s8/
- http://www.samsung.com/uk/smartphones/galaxy-s8/design/
- https://developer.oculus.com/documentation/unity/1.13/concepts/unity-req/
- https://developer.oculus.com/documentation/unity/latest/concepts/unity-ovrinput/
Sumber Aset yang Digunakan:
Â