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);  // 關閉資料庫連接
	
?>
為什麼會看到廣告
40會員
130內容數
獨立遊戲開發紀錄
留言0
查看全部
發表第一個留言支持創作者!
吳佳鑫的沙龍 的其他內容
程式原碼: https://github.com/JokerWuXin/ChatGpt-LineBot 步驟: S1.至OPEN AI 取得 API KEY S2.至LineBot 取得 Channel access token 、Channel secret 並 進行相關設定 S3.至Verce
安裝Python 安裝Open Ai 參考資料 註冊申請 Open AI API 至官方網站申請為會員,接著選 View API Key 進入後 選擇 Create CHAT 範例 官方範例 中文CHAT
XAMPP 伺服器架設 S1. 下載與安裝 S2. 啟動XAMPP、Apache、Mysql S3. Mysql安全性設定 shell : --user=root password "1234" phpmyadmin(config.inc.php) S4. Apache設定
本範例為 PHP 載入 CSV檔,進行數據統計,並計算出各號碼開出次數。 資料來源: 政府資料開放平台 公益彩券各年度各期電腦型彩券獎號、銷售金額與獎金總額 載入CSV檔的作法 將資料進行統計整理 將資料放於陣列的方式 自定義函式 完整原碼
構想上,前端簡單的使用Google Map 做定位,並寫入SQL做第一段比對經緯度。接著前端有一個php上傳圖片的功能(沒有 https 所以就不做網頁開相機的方式)。經過上傳至伺服器後,python 圖形辨識,比對上傳的圖片,若比對成功或相似度差異不大,則判定正確,寫入SQL,端頁面顯示奪寶成功。
本專題為兩塊ESP8266-ESP01 ,分別為 Arduino+ESP-01+YL-69 土壤濕度檢測器與LED燈 ,以及 ESP-01 + DHT11 + LED 傳輸給伺服器端,並於伺服器上 WebSite 透過ESP-01上傳儲 存於 MYSQL 資料呈現曲線圖給前端使用者。此外,前端使用者
程式原碼: https://github.com/JokerWuXin/ChatGpt-LineBot 步驟: S1.至OPEN AI 取得 API KEY S2.至LineBot 取得 Channel access token 、Channel secret 並 進行相關設定 S3.至Verce
安裝Python 安裝Open Ai 參考資料 註冊申請 Open AI API 至官方網站申請為會員,接著選 View API Key 進入後 選擇 Create CHAT 範例 官方範例 中文CHAT
XAMPP 伺服器架設 S1. 下載與安裝 S2. 啟動XAMPP、Apache、Mysql S3. Mysql安全性設定 shell : --user=root password "1234" phpmyadmin(config.inc.php) S4. Apache設定
本範例為 PHP 載入 CSV檔,進行數據統計,並計算出各號碼開出次數。 資料來源: 政府資料開放平台 公益彩券各年度各期電腦型彩券獎號、銷售金額與獎金總額 載入CSV檔的作法 將資料進行統計整理 將資料放於陣列的方式 自定義函式 完整原碼
構想上,前端簡單的使用Google Map 做定位,並寫入SQL做第一段比對經緯度。接著前端有一個php上傳圖片的功能(沒有 https 所以就不做網頁開相機的方式)。經過上傳至伺服器後,python 圖形辨識,比對上傳的圖片,若比對成功或相似度差異不大,則判定正確,寫入SQL,端頁面顯示奪寶成功。
本專題為兩塊ESP8266-ESP01 ,分別為 Arduino+ESP-01+YL-69 土壤濕度檢測器與LED燈 ,以及 ESP-01 + DHT11 + LED 傳輸給伺服器端,並於伺服器上 WebSite 透過ESP-01上傳儲 存於 MYSQL 資料呈現曲線圖給前端使用者。此外,前端使用者
你可能也想看
Google News 追蹤
Thumbnail
這個秋,Chill 嗨嗨!穿搭美美去賞楓,裝備款款去露營⋯⋯你的秋天怎麼過?秋日 To Do List 等你分享! 秋季全站徵文,我們準備了五個創作主題,參賽還有機會獲得「火烤兩用鍋」,一起來看看如何參加吧~
上週的作業保齡球規則 Student A 角色:玩家1、玩具球、娃娃A、娃娃B、娃娃C 規則:打擊娃娃,要贏得遊戲需要使用玩具球打擊到娃娃,共有三次機會可以打擊,全部娃娃都有被打擊到就能贏得勝利,如三次機會中只打擊到其中一隻/兩隻娃娃,另外沒被打擊到的娃娃會消失,遊戲立即結束! Studen
Thumbnail
剩下兩週上課囉,大家加油!! 在一開始我們在課程完成了椅子(角色的移動嘛),但遠遠的看著他移動好像缺少了一些遊戲體驗 嗎?>< 這週我們就來改變遊戲的視角吧~~ 來看一下兩個版本的比較~~ 原本WASD AD控制Y軸旋轉(轉頭),後來改成WASD控制平移座標,把旋轉特別移出來到滑鼠上,
Thumbnail
其他特殊材質調整 Particles Q:大家有沒有發現剛剛葉子是一面有顏色一面透明? A:Unity的渲染只有單面,超奇怪ㄉ啦,他軟體預設就是單面,要改成雙面也行,但會造成電腦負擔,所以只需在想要雙面渲染的物體上賦予即可,不用整個專案都給它。 單面渲染的情形 材質球著色器定義 Sh
Thumbnail
剛剛調了第一層Rendering Mode渲染模式的參數 進入第二層#Opaque渲染參數介紹 搭配教材一起做好ㄌ,先下載檔案樹葉葉葉🌿🌿🌿 解壓縮後把他拖移進去ASSET裡面 點開剛剛LeafPack,找到Mesh>選擇FBX>找到後拖曳到遊戲編輯畫面 部份模型( Fbx&
Thumbnail
材質和貼圖在遊戲開發中扮演著極為重要的角色,其決定了遊戲物件的外觀和表現。 材質(Material)在Unity中定義物體外觀和視覺特性的屬性集合。 包含了物體的顏色、光澤度、透明度、反射率等信息,可以透過調整這些屬性來改變物體在遊戲中的表現形式。舉例來說,可以創建金屬、塑料、木材等不同材質類型
Thumbnail
這篇文章將會講述 static 的小技巧,讓常用的欄位不用重複指定或拖拉。
Thumbnail
前言   這篇文章將會介紹 UI 排版的實用工具。 GridLayoutGroup | 網格排版工具   這是我在撰寫遊戲 UI 時很常使用的 Component 今天在思考新的文章要寫什麼時發現還沒寫過,因此來跟大家介紹這時用的小組件。 運作原理   本質上來說,這個組件會控制他所有的子物件,並且
Thumbnail
前言   這篇文章將會介紹生成物件的五種多載說明和三種應用流程。 Instantiate | 生成遊戲物件   這個英文單字的中文翻譯為「實例化」,如果單純用於 GameObject 的話你可以叫他生成物件,不過 Instatiate 還有其他的功用,像是 Clone 腳本和泛型化,這個就不在我們今
Thumbnail
這篇文章將會介紹 Unity 怎麼處理動畫,從控制中心到每個獨立的動畫,都可以在這篇文章中找到,在這一周的時間內,我會從編輯器講述到實際應用。
Thumbnail
這個秋,Chill 嗨嗨!穿搭美美去賞楓,裝備款款去露營⋯⋯你的秋天怎麼過?秋日 To Do List 等你分享! 秋季全站徵文,我們準備了五個創作主題,參賽還有機會獲得「火烤兩用鍋」,一起來看看如何參加吧~
上週的作業保齡球規則 Student A 角色:玩家1、玩具球、娃娃A、娃娃B、娃娃C 規則:打擊娃娃,要贏得遊戲需要使用玩具球打擊到娃娃,共有三次機會可以打擊,全部娃娃都有被打擊到就能贏得勝利,如三次機會中只打擊到其中一隻/兩隻娃娃,另外沒被打擊到的娃娃會消失,遊戲立即結束! Studen
Thumbnail
剩下兩週上課囉,大家加油!! 在一開始我們在課程完成了椅子(角色的移動嘛),但遠遠的看著他移動好像缺少了一些遊戲體驗 嗎?>< 這週我們就來改變遊戲的視角吧~~ 來看一下兩個版本的比較~~ 原本WASD AD控制Y軸旋轉(轉頭),後來改成WASD控制平移座標,把旋轉特別移出來到滑鼠上,
Thumbnail
其他特殊材質調整 Particles Q:大家有沒有發現剛剛葉子是一面有顏色一面透明? A:Unity的渲染只有單面,超奇怪ㄉ啦,他軟體預設就是單面,要改成雙面也行,但會造成電腦負擔,所以只需在想要雙面渲染的物體上賦予即可,不用整個專案都給它。 單面渲染的情形 材質球著色器定義 Sh
Thumbnail
剛剛調了第一層Rendering Mode渲染模式的參數 進入第二層#Opaque渲染參數介紹 搭配教材一起做好ㄌ,先下載檔案樹葉葉葉🌿🌿🌿 解壓縮後把他拖移進去ASSET裡面 點開剛剛LeafPack,找到Mesh>選擇FBX>找到後拖曳到遊戲編輯畫面 部份模型( Fbx&
Thumbnail
材質和貼圖在遊戲開發中扮演著極為重要的角色,其決定了遊戲物件的外觀和表現。 材質(Material)在Unity中定義物體外觀和視覺特性的屬性集合。 包含了物體的顏色、光澤度、透明度、反射率等信息,可以透過調整這些屬性來改變物體在遊戲中的表現形式。舉例來說,可以創建金屬、塑料、木材等不同材質類型
Thumbnail
這篇文章將會講述 static 的小技巧,讓常用的欄位不用重複指定或拖拉。
Thumbnail
前言   這篇文章將會介紹 UI 排版的實用工具。 GridLayoutGroup | 網格排版工具   這是我在撰寫遊戲 UI 時很常使用的 Component 今天在思考新的文章要寫什麼時發現還沒寫過,因此來跟大家介紹這時用的小組件。 運作原理   本質上來說,這個組件會控制他所有的子物件,並且
Thumbnail
前言   這篇文章將會介紹生成物件的五種多載說明和三種應用流程。 Instantiate | 生成遊戲物件   這個英文單字的中文翻譯為「實例化」,如果單純用於 GameObject 的話你可以叫他生成物件,不過 Instatiate 還有其他的功用,像是 Clone 腳本和泛型化,這個就不在我們今
Thumbnail
這篇文章將會介紹 Unity 怎麼處理動畫,從控制中心到每個獨立的動畫,都可以在這篇文章中找到,在這一周的時間內,我會從編輯器講述到實際應用。