Unity C# โหลดและแสดง JSON Data ติดฐานข้อมูล PHP & MySQL
1. ผมเทสโดยออกแบบฐานข้อมูลง่าย ๆ นะครับมีแค่ 2 field คือ id,name ตามรูปครับ
2. สร้างไฟล์ connect.php สำหรับติดต่อฐานข้อมูล
<?php
define("db_server", "localhost");
define("db_username", "root");
define("db_password", "root");
define("db_name", "dbname");
$conn = mysql_connect(db_server,db_username,db_password);
mysql_select_db(db_name, $conn);
mysql_query('SET NAMES UTF8');
?>3. สร้างไฟล์ saveload.php สำหรับรับค่าจาก C# และบันทึกลงฐานข้อมูล พร้อมกับ return json data กลับไป
<?php
require_once("connect.php");
$name = $_REQUEST['name'];
if($name != ""){
$sql = "INSERT INTO member SET name='$name'";
$result = mysql_query($sql);
}
$sql = "SELECT*FROM member";
$result = mysql_query($sql);
$data = array();
while ($row = mysql_fetch_assoc($result)) {
$r = array(
'id' => $row['id'],
'name' => $row['name']
);
array_push($data,$r);
}
echo json_encode($data);
?>4. เปิดโปรแกรม unity ขึ้นมา ทดลองสร้าง InputField และ Button ให้มีหน้าตาประมาณนี้ ส่วนนี้ ตามใจท่านผู้ชมครับ
5. คลิกขวาที่หน้าต่าง Hierarchy เลือก Create Empty เราจะได้ GameObject มาให้ตั้งชื่อใหม่ว่า AppController สำหรับ GameObject ตัวนี้จะเป็นวัตถุเปล่า ๆ นะครับ เอาไว้ใส่ C# Script ที่เราจะเขียนเพิ่มภายหลัง
6. เสร็จแล้วให้ทำการเพิ่ม C# script ไปที่ AppController กดไปที่ Inspector->Add Component->New script ตั้งชื่อว่า AppController กดปุ่ม Create And Add
7. ให้สังเกตุที่ส่วนของแทบ project เราจะได้ไฟล์ AppControler.cs มาให้ดับเบิ้ลคลิก
ระบบจะเปิดโปรแกรม MonoDevelop ขึ้นมาครับ
และก่อนที่เราจะไปเขียนโค๊ดที่ไฟล์นี้ ให้ไปโหลด LitJson มาไว้ใน assets ก่อนครับ
โหลดที่ https://lbv.github.io/litjson/
8. ใน AppController.cs ให้เราสร้างตัวแปรแบบ public ขึ้นมา เพื่อเชื่อมโยงกับ InputField และ Button ที่เราสร้างไว้ก่อนหน้านี้
using UnityEngine;
using UnityEngine.UI;
using System.Collections;
using LitJson; // import json เข้ามารอไว้เลย
public class AppController : MonoBehaviour {
public Button btnSubmit;
public InputField txtName;
}9. ในหน้าต่าง hierarchy เลือก AppController แล้วทำการเชื่อมโยง โดยการลาก Button และ InputField ไปแทนค่าตัวแปรที่เราเขียนไว้คือ btnSubmit และ txtName
10. เปิดไฟล์ AppController.cs ขึ้นมาครับ แล้วเขียนโค๊ด เพิ่มขึ้นมาประมาณนี้ครับ
private JsonData userData;
void Start () {
btnSubmit.onClick.AddListener (delegate {
Debug.Log("click !");
StartCoroutine(submitMyName());
});
}
IEnumerator submitMyName () {
if (txtName.text.Length <= 0) {
Debug.Log ("please enter name");
return false;
}
Debug.Log("submit !");
WWWForm form = new WWWForm();
form.AddField("name",txtName.text);
WWW www = new WWW("http://localhost:8888/saveload.php", form);
yield return www;
userData = JsonMapper.ToObject(www.text);
int maxUser = userData.Count;
for(int i=0;i<maxUser;i++)
{
Debug.Log(userData[i]["name"]);
}
StopCoroutine (submitMyName());
}11. ลองกดปุ่ม play ทดสอบดูครับ จะเห็นข้อมูลที่เรากรอกไปทุก ๆ ครั้ง ถูกบันทึกและรีเทินค่ากลับมาที่หน้าต่าง Console ที่เหลือก็สุดแล้วแต่จะเอาข้อมูลไปทำอะไรครับ

