如何将游戏状态存储到数据库中,并使用php和c#脚本加载
本文关键字:php 加载 脚本 游戏 状态 存储 数据库 | 更新日期: 2023-09-27 18:24:02
我必须找到一种方法,使用c#脚本和php从数据库中保存和加载游戏状态。到目前为止,我可以将播放器的位置存储到我的本地注册表中,但远程保存是个问题。有人知道我需要执行的步骤列表吗?
using UnityEngine;
using System.Collections;
using System;
using System.Runtime.Serialization.Formatters.Binary;
using System.IO;
public class SaveSystem : MonoBehaviour {
// Use this for initialization
public void SaveState () {
BinaryFormatter bf = new BinaryFormatter ();
FileStream file = File.Create (Application.persistentDataPath + "/PlayerData.dat");
PlayerData data = new PlayerData ();
data.posX = transform.position.x;
data.posY = transform.position.y;
data.posZ = transform.position.z;
data.rotX = transform.eulerAngles.x;
data.rotY = transform.eulerAngles.y;
data.rotZ = transform.eulerAngles.z;
bf.Serialize (file, data);
file.Close ();
}
// Update is called once per frame
public void LoadState () {
if(File.Exists(Application.persistentDataPath + "/PlayerData.dat")){
BinaryFormatter bf = new BinaryFormatter();
FileStream file = File.Open(Application.persistentDataPath + "/PlayerData.dat", FileMode.Open);
PlayerData data = (PlayerData) bf.Deserialize(file);
file.Close();
transform.position = new Vector3(data.posX, data.posY, data.posZ);
transform.rotation = Quaternion.Euler(data.rotX, data.rotY, data.rotZ);
}
[Serializable]
class PlayerData{
public float posX;
public float posY;
public float posZ;
public float rotX;
public float rotY;
public float rotZ;
}
好的,所以我记不清正确的语法,但这里有一些东西可以让你开始,所以在你的服务器上创建一个php文件,并创建加载和保存的函数并创建这样的get变量。
if(isset($GET_["save"]){
SaveFunctionName();
}
现在,当你想将数据发送到服务器并调用此函数时,请执行以下操作:
public string url = "Your server url?ur get variable name";
IEnumerator Start() {
WWWForm form = new WWWForm();
form.AddBinaryData("fileUpload", bytes);
WWW w = new WWW(screenShotURL, form);
yield return w;
}
确保在w中从php返回一个字符串,以检查数据是否已保存。
到目前为止,我找到了一种将玩家位置X、Y、Z和旋转X、Y和Z存储到我的数据库中的方法。Unity C#脚本看起来像这样,这是实现它的最有效方法吗?
[Serializable]
class PlayerData{
public float posX;
public float posY;
public float posZ;
public float rotX;
public float rotY;
public float rotZ;
}
public void SaveState () {
PlayerData data = new PlayerData ();
data.posX = transform.position.x;
data.posY = transform.position.y;
data.posZ = transform.position.z;
data.rotX = transform.eulerAngles.x;
data.rotY = transform.eulerAngles.y;
data.rotZ = transform.eulerAngles.z;
//data.posX.ToString ();
//player = new Player ();
WWWForm form = new WWWForm();
form.AddField("positionX", data.posX.ToString ());
form.AddField("positionY", data.posY.ToString());
form.AddField("positionZ", data.posZ.ToString());
form.AddField("rotateX", data.rotX.ToString());
form.AddField("rotateY", data.rotY.ToString());
form.AddField("rotateZ", data.rotZ.ToString());
WWW w = new WWW("http://localhost:8080/player.php", form);
StartCoroutine(saved(w));
//bf.Serialize (file, data);
//file.Close ();
IEnumerator saved(WWW w)
{
yield return w;
if (w.error == null)
{
if (w.text == "login-SUCCESS")
{
print("WOOOOOOOOOOOOOOO!");
}
else
message += w.text;
}
else
{
message += "ERROR: " + w.error + "'n";
}
}
}
在我的服务器上创建一个名为player的php文件,该文件将我的玩家状态保存在数据库中
<?PHP
$positionX = $_POST['positionX'];
$positionY = $_POST['positionY'];
$positionZ = $_POST['positionZ'];
$roX = $_POST['rotateX'];
$roY = $_POST['rotateY'];
$roZ = $_POST['rotateZ'];
$con = mysql_connect("localhost","root","usbw") or ("Cannot connect!" . mysql_error());
if (!$con)
die('Could not connect: ' . mysql_error());
mysql_select_db("game" , $con) or die ("could not load the database" . mysql_error());
//$pass = md5($pass);
$ins = mysql_query("INSERT INTO `player` ( `Player_ID`, `positionX` , `positionY` , `positionZ` , `rotateX` , `rotateY` , `rotateZ`) VALUES ('' , '".$positionX."' , '".$positionY."' , '".$positionZ."', '".$roX."' , '".$roY."' , '".$roZ."') ; ");
if ($ins)
die ("Succesfully Created User!");
else
die ("Error: " . mysql_error());
?>