Как сделать так, чтобы моя база данных (используя MySQL) загружалась в сцену и была видна? - PullRequest
0 голосов
/ 14 июня 2019

Подводя итог, моя проблема в том, что я хочу добавить некоторую информацию из моей базы данных в мой текстовый игровой объект в единстве.Несколько вопросов, которые возникли у меня в голове:

1.) Нужно ли мне, чтобы мои данные были закодированы в JSON в моем файле PHP?и, конечно же,

2.) Как добавить значение в мой текстовый игровой объект.

Ниже приведено то, что я сделал с кодом:

1.) Iв моем PHP-файле было несколько данных, которые были закодированы с помощью JSON, только два типа данных: Room_Type и Room_Qty .

2.) Я уже называю этов единстве с помощью IEnumerator и попробуйте StartCoroutine, он работает, и он показал мои данные JSON.Я уже отлаживал его, и он отображал что-то вроде этого:
[{"Room_Type": "Melati_Room", "Room_Qty": "6"}]
UnityEngine.Debug: Log (Object)
c__Iterator0: MoveNext() (at Assets / Web.cs: 35)
UnityEngine.SetupCoroutine: InvokeMoveNext (IEnumerator, IntPtr)

3.) Показано Melati_Room для Room_Type и 6 для Room_Qty .Следующим шагом будет вставка « Melati_Room » в моем Web.cs IEnumerator в текстовый игровой объект на Unity с именем Room_Type и вставка 6 в мою сеть.cs IEnumerator в текстовый игровой объект на Unity с именем Room_Qty .

КОД PHP:

<?php
require 'Connection.php';

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

//Create Variable Submitted
$itemID = 2;

$sql = "SELECT Room_Type, Room_Qty FROM BinusApartemenSum WHERE ID_Type = '" . $itemID . "'";
$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();
?>

КОД C # с IEnumerator и StartCoroutine:

// Use this for initialization
void Start () {
    StartCoroutine(GetPropertyStock(""));

}

public IEnumerator GetPropertyStock(string ID_Type) //Action<string> Callback)
{
    WWWForm form = new WWWForm();
    form.AddField("ID_Type", ID_Type);
    //GameObject item = Instantiate(Resources.Load("Prefabs/PropertiContainer") as GameObject);

    //gameObject.GetComponent<GUIText>().guiText = "Room_Type";
    //gameObject.GetComponent<GUIText>().guiText = "Room_Qty";

    using (UnityWebRequest www = UnityWebRequest.Get("http://localhost/MitsalDB/GetStockBA_MawarRoom.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);
            //gameObject.GetComponent<GUIText>().guiText = www.text;
        }
    }
}

} `

1 Ответ

1 голос
/ 14 июня 2019

Хотел ответить в последний раз, но вы удалили вопрос ^^


У вас должна быть правильная структура класса для представления структуры данных json. json2csharp - хороший инструмент для автоматической генерации этой структуры для вас - , но обязательно удалите все {get; set;}, чтобы превратить свойства в поля .

В вашем случае просто что-то вроде

[Serializable]
public class RoomData
{
    public string Room_Type;
    public string Room_Qty;
}

, а затем используйте JsonUtility.FromJson, чтобы создать экземпляр RoomData из строки json, такой как

if(string.IsNulOrEmpty(theJsonString) || string.Equals(theJsonString, "Zero Result")
{
    Debug.LogWarning("Internal Server error", this);
    return;
}

var newRoomData = JsonUtility.FromJson<RoomData>(theJsonString);

Тогда на вопрос, как отобразить это в Unity .. В закомментированной строке я вижу, что вы используете GUIText ... это немного старое, и вы должны заменить его на Text компонентов (см. Руководства по пользовательскому интерфейсу ) в вашей сцене. Так что получите ссылки и просто установите их text значение соответственно:

// Either reference those in the Inspector
public Text roomTypeText;
public Text roomQtyText;


private void Awake()
{
    // or get them on runtime e.g. using Find with the GameObjects' names
    roomTypeText = Find("Room_Type").GetComponent<Text>();
    roomQtyText= Find("Room_Qty").GetComponent<Text>();
}

...

roomTypeText.text = newRoomData.Room_Type;
roomQtyText.text = newRoomData.Room_Qty;

или, если вы хотите отобразить его одним текстом, используйте, например,

aText.text = $"Type:{newRoomData.Room_Type}, Qty:{newRoomData.Room_Qty}";

$"" - это интерполяция строк .. она в основном более читаема, эквивалентна

aText.text = "Type: " + newRoomData.Room_Type + ", Qty:" + newRoomData.Room_Qty;

В общем, как уже говорилось ранее: вы все еще заполняете WWWForm, но не передаете его в WebRequest. Вы, вероятно, должны использовать UnityWebRequest.Post вместо.

Примечание Я также заметил, что ваш JSON на самом деле является массивом. Вы должны обратиться к Сериализация и десериализация Json и Json Array в Unity для советов, как обращаться с массивами JSON в Unity.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...