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 ที่เหลือก็สุดแล้วแต่จะเอาข้อมูลไปทำอะไรครับ