FirebaseUnity 3D

เขียนเกมด้วย Unity การเก็บข้อมูลออนไลน์ขึ้น Firebase Real-Time Database

บทเรียนการเขียนฟังก์ชันเก็บข้อมูลเข้า Firebase Real-Time Database อย่างง่ายผ่าน Unity เพื่อใช้สำหรับทำ Save หรือ Score Board ของเกมออนไลน์

ศึกษาบทเรียนก่อนหน้า: สร้างเกม Unity ร่วมกับ Firebase การใช้ Firebase Authentication

ขั้นตอนคล้ายกัน เพียงแค่เราต้องมีการตั้งค่า Database Rule ก่อนนั่นคือ:

{
  "rules": {
    ".read": true,
    ".write": true
  }
}

เพื่อให้ Database ของเราเขียนไฟล์ได้ อิสระ (ซึ่งแล้วแต่เราว่าจะปรับ Rule แบบไหน) หลังจากนั้นให้เราสร้าง Form ง่ายๆ ขึ้นมาหน่อย ในตัวอย่างนี้ขอยืมงานวิจัยของ ผู้ช่วยศาสตราจารย์ ดร.วิลาวัลย์ อินทร์ชำนาญ เกี่ยวกับ Aging Society Gamification เพราะมีฟังก์ชันที่ใช้งานอยู่เกี่ยวกับ Firebase ที่น่าจะเอามาแบ่งปันกันได้ ออกแบบ Inputfield ดังนี้

ประกอบไปด้วย txt_name, txt_age, txt_height, txt_weight เก็บข้อมูล 4 ช่อง ชื่อ, อายุ, ส่วนสูง และ น้ำหนัก

ทำการ Import Custom Package เข้ามานั่นคือการใช้ Firebase SDK ซึ่งไปดาวน์โหลดได้ที่: https://firebase.google.com/download/unity

หลังจาก Import เข้ามาแล้วให้เราสร้าง GameObject ขึ้นมาใหม่ ตั้งชื่อว่า “FirebaseSystem” เพิ่ม C# เข้าไปคือ FirebaseMainScene.cs หลังจากนั้นให้เราเขียน code คือ

ประกาศ Using ดังนี้:

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
using UnityEngine.SceneManagement;
using Firebase;
using Firebase.Database;
using Firebase.Unity.Editor;

จะเห็นว่าเราเพิ่ม Firebase Library เข้าไป คือ

using Firebase;
using Firebase.Database;
using Firebase.Unity.Editor;

ประกาศ Global Variable เพิ่มเข้าไปใต้ Class เกี่ยวกับการรับค่า Inputfield และ สร้างตัวแปรเพื่อเก็บค่า Firebase Database Instance ตัว Reference เหมือนปกติทั่วไป สำหรับ Write Data

public InputField txt_name, txt_weight, txt_height, txt_ages;
public DatabaseReference reference;

ดูว่า URL ของ Database ของเราอยู่ไหน กำหนดค่าไปในเมธอด Start()

void Start () {
  FirebaseApp.DefaultInstance.SetEditorDatabaseUrl("https://<<your-project-id>>.firebaseio.com/");
  reference = FirebaseDatabase.DefaultInstance.RootReference;		
}

หลังจากนั้นให้เราไป Implement  เมธอดใหม่ชื่อ SendData() เป็น Public

public void SendData(){
	PlayerPrefs.SetString("fullname", ""+txt_name.text);
	PlayerPrefs.SetString("weight", ""+txt_weight);
	PlayerPrefs.SetString("height", ""+txt_height);
	PlayerPrefs.SetString("ages", ""+txt_ages);

	reference.Child("users/"+txt_name.text).Child("weight").SetValueAsync(""+txt_weight.text);
	reference.Child("users/"+txt_name.text).Child("height").SetValueAsync(""+txt_height.text);
	reference.Child("users/"+txt_name.text).Child("ages").SetValueAsync(""+txt_ages.text);
                
        //Change Scene 
	SceneManager.LoadScene("Profile", LoadSceneMode.Single);
}

รับค่า txt_name ไปเก็บใน Node แรกแล้ว ทำ Child Node ของ age,weight,height ก็เป็นอันเสร็จครับ ส่วน PlayerPrefs จะใส่หรือไม่ใส่ก็ได้เป็นแค่การเก็บค่าผ่าน State ของ Unity สำหรับใช้ข้าม Scene ของตัวอย่างนี้เท่านั้น

เชื่อมปุ่ม UI ให้กด แล้วเกิด Action ไปที่ SendData() ก็เป็นอันจบ:

กดดูผลลัพธ์หน่อยดีกว่า:

Document จริงๆ ก็ง่ายครับ ไปอ่านต่อได้ที่: https://firebase.google.com/docs/database/unity/save-data

Asst. Prof. Banyapon Poolsawas

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

Related Articles

Back to top button

Adblock Detected

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