如何将游戏状态存储到数据库中,并使用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和c#脚本加载

好的,所以我记不清正确的语法,但这里有一些东西可以让你开始,所以在你的服务器上创建一个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());
    ?>