Unity x Mysql x PHP x Json

閱讀時間約 25 分鐘
開啟Xampp伺服器,並啟動 apache & mysql

mysql建立

開啟Unity 建立 Script

toPhp.cs

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI; //UI物件需要增加此行
using UnityEngine.Networking;
using System.Text.RegularExpressions;
public class toPhp : MonoBehaviour
{
    public Text UItext; //要設公開的才能從外部加入UItext
    public Text MYtext;
    // Start is called before the first frame update
    void Start()
    {
    }
    public void ConnectTophp()
    {
        StartCoroutine(Test());
    }
    IEnumerator Test()
    {
        string strText = "hello";
        string strUrl = string.Format("http://localhost/unitymysql/test.php?a={0}", strText);
        UnityWebRequest request = UnityWebRequest.Get(strUrl);
        yield return request.SendWebRequest();
        if (request.result == UnityWebRequest.Result.ConnectionError)
        {
            Debug.Log(request.error);
            yield break;
        }
        string html = request.downloadHandler.text;
        changeUItext(html);
        Debug.Log(html);
    }
    public void changeUItext(string html)
    { //設公開的才能利用Unity內建Button觸發方式來喚出
        UItext.text = html;
    }
    // Update is called once per frame
    void Update()
    {
        
    }
    public void ConnectMysql()
    {
        StartCoroutine(Testdb());
    }
    IEnumerator Testdb()
    {
        string strUrl = "http://localhost/unitymysql/connectmysql.php";
        UnityWebRequest request = UnityWebRequest.Get(strUrl);
        yield return request.SendWebRequest();
        if (request.result == UnityWebRequest.Result.ConnectionError)
        {
            Debug.Log(request.error);
            yield break;
        }
        string html = request.downloadHandler.text;
        Debug.Log(html);
        var received_data = Regex.Split(html, "</next>");
        int dataNum = (received_data.Length - 1) / 2;
        Debug.Log("dataNum = " + dataNum.ToString());
        for (int i = 0; i < dataNum; i++)
        {
            string myhtml = "Name: " + received_data[2 * i] + " email: " + received_data[2 * i + 1];
            changeMYtext(myhtml);
            Debug.Log("Name: " + received_data[2 * i] + " email: " + received_data[2 * i + 1]);
        }
    }
    public void changeMYtext(string myhtml)
    { //設公開的才能利用Unity內建Button觸發方式來喚出
        MYtext.text = myhtml;
    }
}

Unity物件

toWeb物件設定

此處需特別留意設定 UItext & MYtext ,否則會出現物件未設定的Null錯誤

Button 設定

測試連線按鈕
連結mysql按鈕

test.php

<?php
	$a = $_GET["a"];
			
	echo $a;
?>

connectmysql.php

<?php
	// 建立MySQL的資料庫連接 
	$host = "localhost";
	$dbuser = "root";
	$dbpassword = "1234";
	$dbname = "user";
	
	$link = mysqli_connect($host,$dbuser,$dbpassword,$dbname);
	if ( !$link ) 
	{
		echo "不正確連接資料庫 " . mysqli_connect_error();
		echo "<br>";
		exit();
	}
	
	mysqli_query($link, "SET NAMES utf8");
	mysqli_query($link, "SET CHARACTER_SET_database= utf8");
	mysqli_query($link, "SET CHARACTER_SET_CLIENT= utf8");
	mysqli_query($link, "SET CHARACTER_SET_RESULTS= utf8");
	$sql = "select * from users";
	
	$result = mysqli_query($link, $sql);
	
	if (!$result) 
	{
		echo "{$sql} 語法執行失敗,錯誤訊息 " . mysqli_error($link);
		echo "<br>";
		mysqli_close($link);  // 關閉資料庫連接
		exit();
	}
	
	$rowNum = mysqli_num_rows($result);
	if ($rowNum <= 0)
	{
		echo "沒有資料";
		echo "<br>";
		mysqli_close($link);  // 關閉資料庫連接
		exit();
	}
	
	while($array = mysqli_fetch_array($result))
	{
		echo $array["name"]."</next>";
		echo $array["email"]."</next>";
	}
	
	mysqli_free_result($result);
	
	mysqli_close($link);  // 關閉資料庫連接
	
?>

使用 Json

使用 Json 傳輸的 toPhp.cs
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI; //UI物件需要增加此行
using UnityEngine.Networking;
using System.Text.RegularExpressions;
public class toPhp : MonoBehaviour
{
    public Text UItext; //要設公開的才能從外部加入UItext
    public Text MYtext;
    public Text Stext; //Json 用
    public Text Utext; //Json 用
    public string Selectx = "http://localhost/unitymysql/tojsonsel.php";
    public string Updatex = "http://localhost/unitymysql/tojsonup.php";
    // Start is called before the first frame update
    void Start()
    {
    }
    public void ConnectTophp()
    {
        StartCoroutine(Test());
    }
    IEnumerator Test()
    {
        string strText = "hello";
        string strUrl = string.Format("http://localhost/unitymysql/test.php?a={0}", strText);
        UnityWebRequest request = UnityWebRequest.Get(strUrl);
        yield return request.SendWebRequest();
        if (request.result == UnityWebRequest.Result.ConnectionError)
        {
            Debug.Log(request.error);
            yield break;
        }
        string html = request.downloadHandler.text;
        changeUItext(html);
        Debug.Log(html);
    }
    public void changeUItext(string html)
    { //設公開的才能利用Unity內建Button觸發方式來喚出
        UItext.text = html;
    }
    // Update is called once per frame
    void Update()
    {
        
    }
    public void ConnectMysql()
    {
        StartCoroutine(Testdb());
    }
    IEnumerator Testdb()
    {
        string strUrl = "http://localhost/unitymysql/connectmysql.php";
        UnityWebRequest request = UnityWebRequest.Get(strUrl);
        yield return request.SendWebRequest();
        if (request.result == UnityWebRequest.Result.ConnectionError)
        {
            Debug.Log(request.error);
            yield break;
        }
        string html = request.downloadHandler.text;
        Debug.Log(html);
        var received_data = Regex.Split(html, "</next>");
        int dataNum = (received_data.Length - 1) / 2;
        Debug.Log("dataNum = " + dataNum.ToString());
        for (int i = 0; i < dataNum; i++)
        {
            string myhtml = "Name: " + received_data[2 * i] + " email: " + received_data[2 * i + 1];
            changeMYtext(myhtml);
            Debug.Log("Name: " + received_data[2 * i] + " email: " + received_data[2 * i + 1]);
        }
    }
    public void changeMYtext(string myhtml)
    { //設公開的才能利用Unity內建Button觸發方式來喚出
        MYtext.text = myhtml;
    }
    //json
    public void JsonSelect()
    { //設公開的才能利用Unity內建Button觸發方式來喚出
        StartCoroutine(SelectJson());
    }
    IEnumerator SelectJson()
    {
        WWWForm form = new WWWForm();
        form.AddField("getlist", "all");
        using (UnityWebRequest www = UnityWebRequest.Post(Selectx, form))
        {
        www.downloadHandler = new DownloadHandlerBuffer();
        yield return www.SendWebRequest();
        if (www.result == UnityWebRequest.Result.ConnectionError)
            {
                Debug.Log(www.error);
            }
            else
            {
                string responseText = www.downloadHandler.text;
                Stext.text = responseText;
                Debug.Log(responseText);
            }
        }
    }
    public void JsonUpdate()
    { //設公開的才能利用Unity內建Button觸發方式來喚出
        StartCoroutine(UpdateJson());
    }
    IEnumerator UpdateJson()
    {
        WWWForm form = new WWWForm();
        form.AddField("udata", "'abc'");
        form.AddField("edata", "'abc'");
        using (UnityWebRequest www = UnityWebRequest.Post(Updatex, form))
        {
            www.downloadHandler = new DownloadHandlerBuffer();
            yield return www.SendWebRequest();
            if (www.result == UnityWebRequest.Result.ConnectionError)
            {
                Debug.Log(www.error);
            }
            else
            {
                string responseText = www.downloadHandler.text;
                Utext.text = responseText;
                Debug.Log(responseText);
            }
        }
    }
    }

tojsonsel.php

<?php
	// 建立MySQL的資料庫連接 
	$host = "localhost";
	$dbuser = "root";
	$dbpassword = "1234";
	$dbname = "user";
	
	$link = mysqli_connect($host,$dbuser,$dbpassword,$dbname);
	if ( !$link ) 
	{
		echo "不正確連接資料庫 " . mysqli_connect_error();
		echo "<br>";
		exit();
	}
	
	mysqli_query($link, "SET NAMES utf8");
	mysqli_query($link, "SET CHARACTER_SET_database= utf8");
	mysqli_query($link, "SET CHARACTER_SET_CLIENT= utf8");
	mysqli_query($link, "SET CHARACTER_SET_RESULTS= utf8");
	$sql = "select * from users";
	
	$result = mysqli_query($link, $sql);
	
	if (!$result) 
	{
		echo "{$sql} 語法執行失敗,錯誤訊息 " . mysqli_error($link);
		echo "<br>";
		mysqli_close($link);  // 關閉資料庫連接
		exit();
	}
	
	$rowNum = mysqli_num_rows($result);
	if ($rowNum <= 0)
	{
		echo "沒有資料";
		echo "<br>";
		mysqli_close($link);  // 關閉資料庫連接
		exit();
	}
	
	$ary[]= array();
	while($row = mysqli_fetch_assoc($result))
	{
		$ary=$row;
	}
	echo json_encode($ary);
	
	mysqli_free_result($result);
	
	mysqli_close($link);  // 關閉資料庫連接
	
?>

tojsonup.php

<?php
	$udata=$_POST["udata"];
	$edata=$_POST["edata"];
	// 建立MySQL的資料庫連接 
	$host = "localhost";
	$dbuser = "root";
	$dbpassword = "1234";
	$dbname = "user";
	
	$link = mysqli_connect($host,$dbuser,$dbpassword,$dbname);
	if ( !$link ) 
	{
		echo "不正確連接資料庫 " . mysqli_connect_error();
		echo "<br>";
		exit();
	}
	
	mysqli_query($link, "SET NAMES utf8");
	mysqli_query($link, "SET CHARACTER_SET_database= utf8");
	mysqli_query($link, "SET CHARACTER_SET_CLIENT= utf8");
	mysqli_query($link, "SET CHARACTER_SET_RESULTS= utf8");
//$udata='51';
	mysqli_select_db($link,"user");
	$sql = "update users set name ={$udata},email ={$edata} where id ='51'";
	
	$result = mysqli_query($link, $sql);
	
	if (!$result) 
	{
		echo "{$sql} 語法執行失敗,錯誤訊息 " . mysqli_error($link);
		echo "<br>";
		mysqli_close($link);  // 關閉資料庫連接
		exit();
	}
	
	mysqli_free_result($result);
	
	mysqli_close($link);  // 關閉資料庫連接
	
?>
39會員
129內容數
獨立遊戲開發紀錄
留言0
查看全部
發表第一個留言支持創作者!
吳佳鑫的沙龍 的其他內容
ESP-01 + DHT11 + LED
閱讀時間約 18 分鐘
圖形辨識~尋寶遊戲
閱讀時間約 23 分鐘
Lotto x PHP 統計
閱讀時間約 7 分鐘
ESP32-CAM 拍照上傳 XAMPP
閱讀時間約 14 分鐘
OPENAI 聊天機器人
閱讀時間約 2 分鐘
你可能也想看
迎新活動「方格新手村」:新格友註冊加入方格子,知名日料吃到飽餐券送給你! 👉 還不是 vocus 的會員嗎?點此註冊,參與新手村活動 👈 近期站上也出現了不少新格友,為了歡迎各位的加入,「方格新手村」隨之登場! 即日起,只要是新註冊帳號於活動期間內發佈 3 則文章,就有機會抽獎獲得知名日料吃到飽餐券。原格友也可以一起同樂,我們準備了小任
Thumbnail
2024-06-21
102
什麼人適合國泰世華 CUBE App ?整理5大推薦原因你覺得哪間網銀的 App 最好用? 近幾年,我為了拿到很多家銀行的回饋,辦了很多家銀行的帳戶,數一數至少也有十幾間! 比較下來,國泰世華 CUBE App ,是我用起來最順手的 👍 國泰究竟贏在哪裡呢?讓我整理 5 個原因給大家~
Thumbnail
2024-07-05
50
川普當選,對台股是利多還是利空?川普在槍擊事件中所表現出來的英勇形象,讓他贏得美國總統大選幾乎已成定局。沒想到他隨口的一句話「台灣搶走美國的晶片生意,所以要付保護費」,就讓台積電在短短三天跌掉超過100 元,台股也跌掉1100點以上。台積電、台股會就此一路下跌嗎?未來該如何因應?  
Thumbnail
2024-07-20
73
2024 虛擬實境 x 人因設計 12Unity 保齡球遊戲拆解&製作上週的作業保齡球規則 Student A 角色:玩家1、玩具球、娃娃A、娃娃B、娃娃C 規則:打擊娃娃,要贏得遊戲需要使用玩具球打擊到娃娃,共有三次機會可以打擊,全部娃娃都有被打擊到就能贏得勝利,如三次機會中只打擊到其中一隻/兩隻娃娃,另外沒被打擊到的娃娃會消失,遊戲立即結束! Studen
2024-05-29
5
2024 虛擬實境 x 人因設計 11 unity第一人稱視角剩下兩週上課囉,大家加油!! 在一開始我們在課程完成了椅子(角色的移動嘛),但遠遠的看著他移動好像缺少了一些遊戲體驗 嗎?>< 這週我們就來改變遊戲的視角吧~~ 來看一下兩個版本的比較~~ 原本WASD AD控制Y軸旋轉(轉頭),後來改成WASD控制平移座標,把旋轉特別移出來到滑鼠上,
Thumbnail
2024-05-29
1
2024 虛擬實境 x 人因設計 10 unity材質&貼圖&超強素材庫03其他特殊材質調整 Particles Q:大家有沒有發現剛剛葉子是一面有顏色一面透明? A:Unity的渲染只有單面,超奇怪ㄉ啦,他軟體預設就是單面,要改成雙面也行,但會造成電腦負擔,所以只需在想要雙面渲染的物體上賦予即可,不用整個專案都給它。 單面渲染的情形 材質球著色器定義 Sh
Thumbnail
2024-05-15
5
2024 虛擬實境 x 人因設計 10 unity材質&貼圖02剛剛調了第一層Rendering Mode渲染模式的參數 進入第二層#Opaque渲染參數介紹 搭配教材一起做好ㄌ,先下載檔案樹葉葉葉🌿🌿🌿 解壓縮後把他拖移進去ASSET裡面 點開剛剛LeafPack,找到Mesh>選擇FBX>找到後拖曳到遊戲編輯畫面 部份模型( Fbx&
Thumbnail
2024-05-14
0
2024 虛擬實境 x 人因設計 10 unity材質&貼圖01材質和貼圖在遊戲開發中扮演著極為重要的角色,其決定了遊戲物件的外觀和表現。 材質(Material)在Unity中定義物體外觀和視覺特性的屬性集合。 包含了物體的顏色、光澤度、透明度、反射率等信息,可以透過調整這些屬性來改變物體在遊戲中的表現形式。舉例來說,可以創建金屬、塑料、木材等不同材質類型
Thumbnail
2024-05-14
0
Unity Component | Types of light這篇文章將會講述光元件的類型。
Thumbnail
2022-11-21
5
Unity C# Tip 1 | static 靜態欄位妙用這篇文章將會講述 static 的小技巧,讓常用的欄位不用重複指定或拖拉。
Thumbnail
2022-11-04
6
Unity Component | GridLayoutGroup前言   這篇文章將會介紹 UI 排版的實用工具。 GridLayoutGroup | 網格排版工具   這是我在撰寫遊戲 UI 時很常使用的 Component 今天在思考新的文章要寫什麼時發現還沒寫過,因此來跟大家介紹這時用的小組件。 運作原理   本質上來說,這個組件會控制他所有的子物件,並且
Thumbnail
2022-10-17
6
Unity C# | Instantiate GameObject前言   這篇文章將會介紹生成物件的五種多載說明和三種應用流程。 Instantiate | 生成遊戲物件   這個英文單字的中文翻譯為「實例化」,如果單純用於 GameObject 的話你可以叫他生成物件,不過 Instatiate 還有其他的功用,像是 Clone 腳本和泛型化,這個就不在我們今
Thumbnail
2022-10-12
6
Unity Animation | 介紹與編輯視窗這篇文章將會介紹 Unity 怎麼處理動畫,從控制中心到每個獨立的動畫,都可以在這篇文章中找到,在這一周的時間內,我會從編輯器講述到實際應用。
Thumbnail
2022-09-05
5
迎新活動「方格新手村」:新格友註冊加入方格子,知名日料吃到飽餐券送給你! 👉 還不是 vocus 的會員嗎?點此註冊,參與新手村活動 👈 近期站上也出現了不少新格友,為了歡迎各位的加入,「方格新手村」隨之登場! 即日起,只要是新註冊帳號於活動期間內發佈 3 則文章,就有機會抽獎獲得知名日料吃到飽餐券。原格友也可以一起同樂,我們準備了小任
Thumbnail
2024-06-21
102
什麼人適合國泰世華 CUBE App ?整理5大推薦原因你覺得哪間網銀的 App 最好用? 近幾年,我為了拿到很多家銀行的回饋,辦了很多家銀行的帳戶,數一數至少也有十幾間! 比較下來,國泰世華 CUBE App ,是我用起來最順手的 👍 國泰究竟贏在哪裡呢?讓我整理 5 個原因給大家~
Thumbnail
2024-07-05
50
川普當選,對台股是利多還是利空?川普在槍擊事件中所表現出來的英勇形象,讓他贏得美國總統大選幾乎已成定局。沒想到他隨口的一句話「台灣搶走美國的晶片生意,所以要付保護費」,就讓台積電在短短三天跌掉超過100 元,台股也跌掉1100點以上。台積電、台股會就此一路下跌嗎?未來該如何因應?  
Thumbnail
2024-07-20
73
2024 虛擬實境 x 人因設計 12Unity 保齡球遊戲拆解&製作上週的作業保齡球規則 Student A 角色:玩家1、玩具球、娃娃A、娃娃B、娃娃C 規則:打擊娃娃,要贏得遊戲需要使用玩具球打擊到娃娃,共有三次機會可以打擊,全部娃娃都有被打擊到就能贏得勝利,如三次機會中只打擊到其中一隻/兩隻娃娃,另外沒被打擊到的娃娃會消失,遊戲立即結束! Studen
2024-05-29
5
2024 虛擬實境 x 人因設計 11 unity第一人稱視角剩下兩週上課囉,大家加油!! 在一開始我們在課程完成了椅子(角色的移動嘛),但遠遠的看著他移動好像缺少了一些遊戲體驗 嗎?>< 這週我們就來改變遊戲的視角吧~~ 來看一下兩個版本的比較~~ 原本WASD AD控制Y軸旋轉(轉頭),後來改成WASD控制平移座標,把旋轉特別移出來到滑鼠上,
Thumbnail
2024-05-29
1
2024 虛擬實境 x 人因設計 10 unity材質&貼圖&超強素材庫03其他特殊材質調整 Particles Q:大家有沒有發現剛剛葉子是一面有顏色一面透明? A:Unity的渲染只有單面,超奇怪ㄉ啦,他軟體預設就是單面,要改成雙面也行,但會造成電腦負擔,所以只需在想要雙面渲染的物體上賦予即可,不用整個專案都給它。 單面渲染的情形 材質球著色器定義 Sh
Thumbnail
2024-05-15
5
2024 虛擬實境 x 人因設計 10 unity材質&貼圖02剛剛調了第一層Rendering Mode渲染模式的參數 進入第二層#Opaque渲染參數介紹 搭配教材一起做好ㄌ,先下載檔案樹葉葉葉🌿🌿🌿 解壓縮後把他拖移進去ASSET裡面 點開剛剛LeafPack,找到Mesh>選擇FBX>找到後拖曳到遊戲編輯畫面 部份模型( Fbx&
Thumbnail
2024-05-14
0
2024 虛擬實境 x 人因設計 10 unity材質&貼圖01材質和貼圖在遊戲開發中扮演著極為重要的角色,其決定了遊戲物件的外觀和表現。 材質(Material)在Unity中定義物體外觀和視覺特性的屬性集合。 包含了物體的顏色、光澤度、透明度、反射率等信息,可以透過調整這些屬性來改變物體在遊戲中的表現形式。舉例來說,可以創建金屬、塑料、木材等不同材質類型
Thumbnail
2024-05-14
0
Unity Component | Types of light這篇文章將會講述光元件的類型。
Thumbnail
2022-11-21
5
Unity C# Tip 1 | static 靜態欄位妙用這篇文章將會講述 static 的小技巧,讓常用的欄位不用重複指定或拖拉。
Thumbnail
2022-11-04
6
Unity Component | GridLayoutGroup前言   這篇文章將會介紹 UI 排版的實用工具。 GridLayoutGroup | 網格排版工具   這是我在撰寫遊戲 UI 時很常使用的 Component 今天在思考新的文章要寫什麼時發現還沒寫過,因此來跟大家介紹這時用的小組件。 運作原理   本質上來說,這個組件會控制他所有的子物件,並且
Thumbnail
2022-10-17
6
Unity C# | Instantiate GameObject前言   這篇文章將會介紹生成物件的五種多載說明和三種應用流程。 Instantiate | 生成遊戲物件   這個英文單字的中文翻譯為「實例化」,如果單純用於 GameObject 的話你可以叫他生成物件,不過 Instatiate 還有其他的功用,像是 Clone 腳本和泛型化,這個就不在我們今
Thumbnail
2022-10-12
6
Unity Animation | 介紹與編輯視窗這篇文章將會介紹 Unity 怎麼處理動畫,從控制中心到每個獨立的動畫,都可以在這篇文章中找到,在這一周的時間內,我會從編輯器講述到實際應用。
Thumbnail
2022-09-05
5