gpt4 book ai didi

c# - 将 Unity App 连接到 mySQL 数据库

转载 作者:搜寻专家 更新时间:2023-10-30 23:35:26 24 4
gpt4 key购买 nike

所以我在 Unity 中创建了这个应用程序,我正在尝试将它连接到我创建并连接到网站的 mySQL 数据库。我可以通过网站上的表格将内容插入数据库。那是有效的。

我接下来要做的是连接 Unity 应用程序,以便它也可以访问数据库中的内容。我正在用 C# 和 php 编码。我希望统一应用程序向网站询问数据库中的某些信息。然后网站应该查看数据库并将一些信息返回给统一应用程序。

这不是一个重复的问题。我已经查看了此处的问题,但仍然无法正常工作。现在我的统一应用程序能够向我的网页发送一条消息,然后我的网页会正确回显。 (我知道这不是我所说的功能,但我现在只是在测试)。但是,当我尝试从我的网页获取我的 Unity 应用程序中的响应时,我调试的只是 <html> .

您可以访问我的网站:http://historicstructures.org/forms.html

这是我的 PHP 代码:

<html> 

<style type="text/css">
body {background-color:#666666; color: white;}
</style>
<body>
<h1 align = "center">
<img src="housebackground.jpg" alt="Mountain View" style="width:97%;height:228px;" ></h1>
<h1 align = "center">Submission Status</h1>
<p align = "center">
<?php


//this is the variable that is being recieved from the unity script
$AuthorName = $_POST["Author"];

//here i am printing it out so that it will be sent back to the unity script
// i am also echoing it onto the webpage so that i know it is getting the variable
//correctly from the unity script
echo $AuthorName;
header("Access-Control-Allow-Origin: *");
print($AuthorName);

//gets all the variables the user inputted to form
$StructureName = $_POST["StructureName"];
$Author = $_POST["Author"];
$YearBuilt = $_POST["YearBuilt"];
$EraBuilt = $_POST["EraBuilt"];
$YearDestroyed = $_POST["YearDestroyed"];
$EraDestroyed = $_POST["EraDestroyed"];
$Latitude = $_POST["Latitude"];
$Longitude = $_POST["Longitude"];
$Structurelink = "no exist yet";

//checks to make sure the information is in the right format
$isValid = true;
$errCode = 0;

if ($Latitude<-90 || $Latitude>90){
$isValid = false;
$errCode = 1;

}

if ($Longitude<-180 || $Longitude>180){
$isValid = false;
$errCode = 2;

}

if ($YearBuilt<-400 || $YearBuilt>400){
$isValid = false;
$errCode = 3;

}

if ($YearDestroyed<-400 || $YearDestroyed>400){
$isValid = false;
$errCode = 4;

}



//if the informationt the user gave was correct, then insert into database
if ($isValid ==true){

$servername = "localhost";
$username = "...";
$password = "...";
$dbname = "StructureInfo";

// Create connection
$conn = new mysqli($servername, $username, $password, $dbname);
// Check connection
if ($conn->connect_error) {
die("Connection failed: " . $conn->connect_error);
}


$sql = "INSERT INTO info (ID, StructureName, Author, YearBuilt, EraBuilt, YearDestroyed, EraDestroyed, Latitude, Longitude, StructureLink)
VALUES ('null','$StructureName','$Author','$YearBuilt','$EraBuilt','$YearDestroyed','$EraDestroyed','$Latitude','$Longitude','$Structurelink')";

if ($conn->query($sql) === TRUE) {
echo "New record created successfully";
} else {
echo "Error: " . $sql . "<br>" . $conn->error;
}


$conn->close();

}


//the user has an error in the information they inputted
else{
echo "Your submission was invalid and so it was not submitted. ";

switch ($errCode) {
case 1:
echo "Your latitude is out of bounds.";
break;
case 2:
echo "Your longitude is out of bounds. ";
break;
case 3:
echo "Your year built is out of bounds. ";
break;
case 4:
echo "Your year destroyed is out of bounds. ";
break;
default:
echo "Go back and review your data to make sure it is correct.";
}
}

?>
</p>

<br><br>
</body>
</html>

这是我附加到按钮的统一代码,我不确定把它放在哪里所以我对按钮的点击是这个 js 的主要部分:

#pragma strict

function Start () {

}

function Update () {

}

function GetFromDB(){
var url = "http://historicstructures.org/action_page_post.php";
var form = new WWWForm();
form.AddField( "Author", "Jess" );

var www = new WWW( url, form );

// wait for request to complete
yield www;

// and check for errors
if (www.error == null)
{
Debug.Log(www.text);
} else {
// something wrong!
Debug.Log("WWW Error: "+ www.error);
}
}

GetFromDB();

最佳答案

首先,您的代码是 Javascript/Unityscript 但您标记了 C#。我认为您应该使用 C#,因为它比 Javascript/Unityscript 具有更多的特性和支持。

Here is my unity code which is attached to a button, I wasn't sure where to put it so my onclick for the button is the main of this js

创建一个 C# 脚本,然后订阅 Button 的 onClick 事件。按下按钮时,启动将连接到数据库的协程。

public Button button;

void OnEnable()
{
button.onClick.AddListener(() => { StartCoroutine(GetFromDB()); });
}

void OnDisable()
{
button.onClick.RemoveAllListeners();
}

IEnumerator GetFromDB()
{
var url = "http://historicstructures.org/action_page_post.php";
var form = new WWWForm();
form.AddField("Author", "Jess");

WWW www = new WWW(url, form);

// wait for request to complete
yield return www;

// and check for errors
if (String.IsNullOrEmpty(www.error))
{
UnityEngine.Debug.Log(www.text);
}
else
{
// something wrong!
UnityEngine.Debug.Log("WWW Error: " + www.error);
}
}

如果您是 C# 新手,this Unity 教程应该可以帮助您入门。您可以找到其他 Unity UI 事件示例 here .

编辑:

However when I then go try to get my response in my Unity application from my webpage, all I debug is <html>.

我没有看到 <html>在你原来的问题。那是因为 <html>可以在 stackoverflow 上使用来排列文本。我编辑了你的问题和formatted <html>写入代码以使其显示。

您的代码没有任何问题。 Unity 根本没有显示从服务器接收到的所有其他数据,因为您的代码中有一个新行。只需点击 <html>您在编辑器中看到的日志,它会向您显示来自服务器的所有其他数据。您必须在编辑器中单击该错误才能查看其余数据。

请注意,您当前的脚本将向 Unity 输出错误:

Your submission was invalid and so it was not submitted.

那是因为您没有填写所有要求的表格。

应该这样做:

form.AddField("Author", "Jess");
form.AddField("YearDestroyed", "300");
form.AddField("YearBuilt", "300");
form.AddField("Longitude", "170");
form.AddField("Latitude", "60");
form.AddField("StructureName", "IDK");

还有一些事情:

1。从您的服务器中删除 html 代码。如果你想使用 POST/GET,那不应该在那里。如果那里有 html 代码,将很难提取数据。所以,你的代码应该只从 <?php 开始并以 ?> 结尾

2。如果您要从服务器接收多于 1 个数据,请使用 json。

在 PHP 端,使用 json_encode将您的数据转换为 json,然后使用 print 发送到 Unity或 echo .谷歌json_encode获取更多信息。

在 Unity C# 端,使用 JsonUtilityJsonHelper来自 this post反序列化来自服务器的数据。

3。最后,不是构建错误消息并从服务器输出到 Unity,而是简单地从服务器发送错误代码。

在 Unity C# 端,制作一个将错误代码转换为完整错误消息的类。

关于c# - 将 Unity App 连接到 mySQL 数据库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43382377/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com