从我的数据库(MySQL)获取价值并自动操纵GameObjects

时间:2019-06-13 13:01:49

标签: c# php mysql visual-studio unity3d

在Unity内部,我有预制件,它称为“ PropertyContainer”,其中装有2个文本游戏对象(Room_Type和Room_Qty),我想从数据库中对其进行动态更改。我曾尝试学习和观看任何YouTube教程以及在互联网上。几个星期后,尝试搜索并观察我仍然无法弄清楚如何实现我的代码。

下面是我从互联网上的一些教程和一些案例中获得的代码。
第一个代码,是我使用的php代码:

<?php
require 'Connection.php';

//Check Connection
if ($conn->connect_error){
    die("Connection Failed: " . $conn->connect_error);
}

//Create Variable Submitted
$ID_Type = 2;

$sql = "SELECT Room_Type, Room_Qty FROM House WHERE ID_Type = '" . $ID_Type . "'";
$result = $conn->query($sql);

if ($result->num_rows > 0){
    //Output data of each row.
    $rows = array();

    while ($row = $result->fetch_assoc()) {
        $rows[] = $row;
    }
    //After the whole array is created.
    echo json_encode($rows);
}else {
    echo "Zero Result";
}

$conn->close();?>

它调用 GetStockHouse_RoseType.php ,成功显示我的值是Json文件后,下一步需要将其调用到Unity中。我统一使用了几个代码。
第二个代码,使用C#调用了Web.cs:

public IEnumerator GetPropertyStock(string ID_Type, Action<string> callback)

{
    WWWForm form = new WWWForm();<br>
    form.AddField("ID_Type", ID_Type);

    using (UnityWebRequest www = UnityWebRequest.Get("http://localhost/xxxDB/GetStockHouse_RoseType.php"))
    {
        yield return www.SendWebRequest();

        if (www.isNetworkError || www.isHttpError)
        {
            Debug.Log(www.error);
        }
        else
        {
            //Show results as a text.
            Debug.Log(www.downloadHandler.text);
            string jsonArray = www.downloadHandler.text;

            callback(jsonArray);
        }
    }
}

第三条代码,称为Items.cs:

Action<string> _createItemsCallback;
// Use this for initialization
void Start () {

    _createItemsCallback = (jsonArrayString) => {
        StartCoroutine(CreateItemsRoutine(jsonArrayString));
    };

    CreateItems();

}

// Update is called once per frame
public void CreateItems() {
    StartCoroutine(Main.Instance.Web.GetPropertyStock(_createItemsCallback));
}

IEnumerator CreateItemsRoutine(string jsonArrayString)
{
    //Parsing json array string as an array
    JSONArray jsonArray = JSON.Parse(jsonArrayString) as JSONArray;

    for (int i = 0; i < jsonArray.Count; i++)
    {
        //Create local variables
        bool isDone = false; //Are we done downloading?
        string ID_Type = jsonArray[i].AsObject["ID_Type"];
        JSONObject itemInfoJson = new JSONObject();

        //Create a callback to get the information from Web.cs
        Action<string> getItemInfoCallback = (itemInfo) =>
        {
            isDone = true;
            JSONArray tempArray = JSON.Parse(itemInfo) as JSONArray;
            itemInfoJson = tempArray[0].AsObject;
        };

        StartCoroutine(Main.Instance.Web.GetPropertyStock(ID_Type, getItemInfoCallback));

        //Wait until the callback is called from the Web (info finished downloading).
        yield return new WaitUntil(() => isDone == true);

        //Instantiate GameObject (item prefab).
        GameObject item = Instantiate(Resources.Load("Prefabs/PropertiContainer") as GameObject);
        item.transform.SetParent(this.transform);
        item.transform.localScale = Vector3.one;
        item.transform.localPosition = Vector3.zero;

        //Fill Information.
        item.transform.Find("Room_Type").GetComponent<Text>().text = itemInfoJson["Room_Type"];
        item.transform.Find("Room_Qty").GetComponent<Text>().text = itemInfoJson["Room_Qty"];
    }
    yield return null;
}

第四个代码,称为Main.cs:

public static Main Instance;

public Web Web;

// Use this for initialization
void Start () {
    Instance = this;
    Web = GetComponent<Web>();
}

注释:
第二个和第四个代码在Unity中设置为一个(1)空对象,而第三个和第四个代码在父级中设置名为 PropertyContainer

下面是我的Unity图片: 图片1)Main.cs和Web.cs将其设置为一个空对象,并在我的游戏对象中查找Room_Type和Room_Qty。

Main.cs&Web.cs

Main.cs & Web.cs

Item.cs

Item.cs

统一文件

Unity File

我期望的是PropertyContainer上的两(2)个文本游戏对象(Room_Type和Room_Qty)可以更改为我的.php代码。我希望所有这些信息都能完全理解。

0 个答案:

没有答案