สร้างเกม ด้วย unity - ติดต่อ Database ด้วย WWW ในรูปแบบของ JSON





สร้างเกม ด้วย Unity บทความนี้จะมาดูวิธีการสร้างเกมบน Unity ติดต่อกับ Database ซึ่งในตัวอย่างนี้ เราจะใช้เว็บ ที่เป็นของ Asp.Net ส่วน Database เราจะใช้ SQL Server ครับ


สำหรับเพื่อนที่ยังไม่มี SQL Server ให้ไป download ตามลิ้ง ด้านล่าง แล้วติดตั้งโปรแกรมให้เรียบร้อยครับ
 https://www.microsoft.com/en-us/sql-server/sql-server-downloads

หลังจากติดตั้งเรียบร้อยแล้วเปิดตัวโปรแกม SQL Server ขึ้นมาได้เลยครับ



ซึ้งพอเข้ามาหน้าแรก ตัวโปรแกรมก็จะให้เรา Connect ไปที่เครื่องที่เราต้องการจะ Connect
ตัวอย่างนี้เราก็ไปที่เครื่องตัวเองก่อน โดยใส่ชื่อเครื่อง ไปที่ Server name :

เอาชื่อเครื่องไปใส่ที่ Server name

ถ้าเพื่อนๆ มีการตั้ง Password ตอนที่ลงโปรแกรม SQL Server ก็อย่าลืมใส่ User Password ด้วยนะครับ

จากนั้นเราจะมาสร้าง Database กันก่อน โดย คลิกขวาที่ Databases แล้วเลือก New Database.. ตามภาพด้านล่าง



ให้เราตั้งชื่อ Database ของเราในช่อง Database name ครับ 
ตัวอย่างด้านล่างเราตั้งชื่อ Database ว่า myDb จากนั้นกด OK




ตามภาพด้านล่างเราจะ Database ของเราแล้ว ก็คือ myDB จากนั้นให้เพื่อนสร้าง Table โดยคลิกขวาที่ Tables แล้วกดเลือก Table... ตามภาพด้านล่างครับ


จากนั้นก็เพิ่มข้อมูลเข้าไป ใน Table ตามที่เราจะให้เป็นครับ 
ตามตัวอย่าง เราให้มีทั้งหมด 4 Column ตามภาพเลยครับ

พอกำหนดค่าเสร็จแล้วให้เรา กด save หรือ Ctrl+s ได้เลย จะมี popup เด้งขึ้นมาให้เราตั้งชื่อนะครับ
ในที่นี้ เราตั้งเป็น userTable 

หลังจากที่เรากด save เรียบร้อยจะสังเกตุเห็นว่ามี Table ตามชื่อทีเราตั้งขึ้นมาเรียบร้อยตามภาพด้านล่างครับ ให้เราคลิกขวาที่ชื่อ Table ที่เราตั้ง แล้วกดเลือก Edit จากนั้นให้เพื่อนป้อนข้อมูลด้านขวาตามภาพด้านล่างครับ พอสร้างเสร็จ กดท่ี่เครื่องหมาย ตกใจ ! สีแดงๆบนแถบเครื่องมือ สักทีนึง ถ้าข้อมูลที่เพื่อนๆป้อนไปยังอยู่ถือว่า โอเค เรียบร้อย 



Database พร้อม !!

หลังจากที่เราเตรียม Database เรียบร้อยแล้ว ที่นี่เรามาเขียนเว็บไซต์กันครับ เขียนให้ดึงข้อมูลจาก Database แล้ว return ค่ากลับไปแสดงบนหน้าเว็บ เป็นในรูปแบบของ JSON


ขั้นแรกให้เรา New Project ใหม่ขึ้นมา เลือกเป็น C# > Web แล้วเลือก ASP.NET Web Application ครับ
ตั้งชื่อให้ Project สักหน่อย แล้วกด OK 



จากนั้นจะมีหน้าต่างตามภาพด้านล่างขึ้นมา ให้เราเลือกเป็น Empty แล้วกด OK ได้เลยครับ



เราก็จะได้ Project ที่จะเป็นเว็บเขียนติดต่อ Database เราแล้ว ไม่รอช้า กด เพื่อสร้างหน้าเว็บกันเลย ให้คลิกขวาที่ชื่อ Project เลือก Add > New Item.. ตามภาพด้านล่างครับ



ให้เราเลือกเป็น Web Form ตั้งชื่อตามตัวอย่างเราตั้งเป็น TestDb.aspx ครับ แล้วกด Add ตามภาพด้านล่างครับ



หลังจากที่เรา Add Web Form เข้าแล้วสังเกตุที่เ Solution Explorer ก็จะมี file ที่เป็นหน้าเว็บเพิ่มขึ้นมา
ให้เราเลือกเปิด ไฟล์หน้าเว็บนั้นที่ลงท้ายด้วย .cs โดยการ double click ขึ้นมาครับ จะได้ตามภาพด้านล่าง


ทีนี่หน้าเว็บของเราก็พร้อมสำหรับจะเขียนโค้ดแล้วยะครับ

ขั้นตอนต่อไป เราจะใช้ Entity ในการเชื่อมต่อกับ Database ระหว่างตัวเว็บที่เป็น Asp.Net ของเรากับ SQL Server ที่เราเตรียม Database เตรียม Table ไว้พร้อมแล้วก่อนหน้านี้นะครับ

มาเริ่มสร้าง Entity กันเลย

ขั้นแรกให้คลิกขวาที่ชื่อ Project เลือกไปที่ Add > New Item...



จากนั้นให้ ค้นหา โดยพิมพ์คำว่า entity ให้เราเลือกเป็น ADO.NET Entity Data Model จากนั้นตั้งชื่อ แล้วกด Add ครับ



ต่อมาให้เลือกเป็น EF Designer from Database แล้วกด Next


จากนั้นให้กดไปที่ New Connection...



ให้เรากับไปดูชื่อ Server ที่โปรแกรม SQL Server ว่าชื่ออะไร


เอาชื่อ Server name จาก SQL Server มาใส่ครับ ใส่ user password ถ้ามีครับ เลือกชื่อ Database ที่เราตั้งไว้ ตามตัวอย่าง เป็น myDB


ก่อนจะกด OK ลองกด Test Connection ดูสักหน่อยครับว่าได้ไหม

ถ้าขึ้นแบบนี้ก็โอเคครับ

หลังจากที่เรากดปุ่ม OK ก็จะมี Connection string ให้เรียบร้อย กดตั้งชื่อ แล้ว Next ได้เลยครับ


 เลือก version ของ entity แล้วกด next ครับ



ให้เช็คถูกที่ชื่อ Table ในที่เราสร้างใน Database ครับ จากนั้น ให้เช็คเลือก include foreign keycolumn in the model อย่างเดียว ตั้งชื่อแล้วกด Finish ได้เลยครับ



 เราก็จะได้ Model Entity ที่ไว้สำหรับ Connect database เรียบร้อย


กลับมาที่หน้าเว็บที่เป็นไฟล์ .cs แล้วเราก็ใส่โค้ดตามด้านล่างลงไปเลย
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Script.Serialization;
using System.Web.UI;
using System.Web.UI.WebControls;

namespace testWebUnity
{
    public partial class TestDb : System.Web.UI.Page
    {
        protected void Page_Load(object sender, EventArgs e)
        {
            if(Page.Request.HttpMethod == "POST")
            {
                if (Request.Form["case"].Equals("getUsernById"))
                {
                    Response.Write(getUser(Request.Form["id"].ToString()));
                    Response.End();
                }
            }
            else
            {
                Response.Write("Hello Unity");
                Response.End();
            }
        }

        public string getUser(string id)
        {
            using (var db = new myDBEntities())
            {
                var query = (from t1 in db.userTable
                             where t1.user_id == id
                             select new
                             {
                                 name = t1.name,
                                 gender = t1.gender,
                                 age = t1.age,
                             }).FirstOrDefault();
                var serializer = new JavaScriptSerializer();
                string json = serializer.Serialize(query);
                return json;
            }
        }
    }
}


อธิบายโค้ดสักหน่อยนะครับ 

ใน page load  จะเช็คค่าจากพารามิเตอร์ที่ส่งมาผ่าน url ตามชื่อ ค่าข้อมูลถ้าตรงเงื่อนไข ก็จะเรียกฟังชั่น getUser()

ภายใน function getUser(string id) จะเป็นการเขียนดึงค่าจาก database โดยเช็คเงื่อนไข ตาม user id ครับ เมื่อดึงค่ามาได้ เราจะแปลงค่าให้เป็นในรูปแบบของ JSON แล้ว return กลับไปเป็น string ครับ

นั้นหมายความว่าถ้าเราเรียก url http:www.xxx.com/TestDb.aspx?case=getUsernById ในรูปแบบของ post เราก็จะได้ค่า {"name":"Mr.David","gender":"male","age":"29"} ที่เป็นในรูปแบบ JSON แสดงบนหน้าเว็บนั่นเอง

เอาละครับทีนี้ให้เรา กด run ตัวโปรเจ็กเว็บนี้ขึ้นมา 

ถ้าขึ้นแบบรูปด้านล่างก็โอเคครับ เว็บพร้อมใช้งาน เราก็ Run ค้างไว้ก่อน จำลองว่ามีเว็บ run อยู่บนโลกนี้จริงๆครับ


กลับไปที่ Unity ก็เหมือนเดิมครับ สร้าง script ที่เป็น C# มาแล้วก็เอาไปยัดไว้ใน object ใดสักอันหนึ่ง เพื่อให้ script นั้นทำงานจากนั้นก็ใส่ โค้ดตามนี้ครับ

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

public class NewBehaviourScript : MonoBehaviour {

    string url = "http://localhost:55395/TestDb.aspx";

    [System.Serializable]
    public class MyClass
    {
        public string name;
        public string gender;
        public string age;
    }

    void Start()
    {
        StartCoroutine(getCallBack());
    }

    IEnumerator getCallBack()
    {
        WWWForm form = new WWWForm();
        form.AddField("case", "getUsernById");
        form.AddField("id", "test001");

        WWW w = new WWW(url, form);
        yield return w;

        if(w.error != null)
        {
            StartCoroutine(getCallBack());
        }
        else
        {
            MyClass myObject = new MyClass();
            myObject = JsonUtility.FromJson(w.text);
            Debug.Log(w.text);
            Debug.Log(myObject.name);
            Debug.Log(myObject.gender);
            Debug.Log(myObject.age);
        }
    }
}


อธิบายโค้ดกันนิดนึงครับ

string url = "http://localhost:55395/TestDb.aspx"; ส่วน url นี้ให้เราไป copy จากเว็บที่เรา run ค้างไว้อยู่มาใช้ได้เลยครับ

ส่วนภายใน function ก็เป็นการเรียก หน้าเว็บที่เรา run อยู่ โดย ส่งค่า พารามิเตอร์ไป 2 ค่า
โดย 
ค่าที่ 1 ชื่อว่า case มีค่าเป็น getUsernById
ค่าที่ 2 ชื่อว่า id มีค่าเป็น test001

จากนั้นถ้าไม่มี error อะไร ค่าที่ได้ใน w.text ก็จะเป็นค่าจากหน้าเว็บ ซึ้งเป็น JSON 
ในโค้ดเราแปลงค่าจาก JSON กลับมาเป็นในรูปแบบของ class ตามตัวอย่างเราก็สามารถเรียก ชื่อ class แล้วต่อด้วยค่านั้นๆได้เลย


ผลการ run จะเห็นว่าค่าที่ได้จากหน้า เป็นค่าจากใน database ที่ถูกแปลงเป็น JSON แล้ว render บนหน้าเว็บ จากนั้นตัว Unity ไปอ่านค่ามาโดยใช้ class www แล้วแปลงค่า JSON ให้อยู่ในรูปแบบของ class ที่เราต้องการ และนำไปใช้ต่อได้ในแบบสากล


ใครที่ยังงงๆลองไปฟังวิดีโอการสอนนี้อาจช่วยได้ครับ 



สรุป

สำหรับบทความนี้ เพื่อนๆจะได้การเขียนเชื่อมต่อกับ database ด้วย entity ซึ้งตัว Entity จะช่วยให้เราลดการเขียนโปรแกรมได้เยอะ พอสมควร และการส่งค่าผ่านกันด้วย JSON ก็จะใช้กันเป็นแบบสากลอยู่แล้ว และหวังว่าบทความจะเป็นประโยชน์ให้เพืืิอนๆนำไปใช้งานได้ต่อๆไป 

สามารถอ่านบทความที่เกี่ยวข้องของเราที่นี่  >> รวมลิ้งค์บทความ สร้างเกมด้วย Unity

1 ความคิดเห็น:

  1. If you're looking to lose fat then you absolutely need to start following this totally brand new tailor-made keto meal plan diet.

    To design this service, certified nutritionists, fitness trainers, and cooks have united to develop keto meal plans that are effective, suitable, economically-efficient, and fun.

    Since their launch in early 2019, 100's of clients have already transformed their figure and well-being with the benefits a certified keto meal plan diet can offer.

    Speaking of benefits: clicking this link, you'll discover eight scientifically-confirmed ones offered by the keto meal plan diet.

    ตอบลบ

ขับเคลื่อนโดย Blogger.