Как ввести IP-адрес в Unity? - PullRequest
1 голос
/ 03 февраля 2020

У меня есть 3 отдельных кода, которые требуют, чтобы я менял IP-адрес вручную всякий раз, когда я тестирую снаружи. поэтому я пытаюсь ввести поле ввода в единстве, чтобы я мог ввести его один раз, и он будет использоваться всем моим кодом, но я не знаю, как это сделать.

enter image description here Это просто простое поле ввода, которое я поместил на своей странице Homepage.cs для ввода IP-адреса

using UnityEngine;
using UnityEngine.UI;

public class HomePage : MonoBehaviour
{
public Text playerDisplay;
public InputField ipField;
public Button submitButton;

private void Start()
{
    if (DBManager.LoggedIn)
    {
        playerDisplay.text = "Player: " + DBManager.username;
    }

}

public void QuitGame()
{
    Debug.Log("Quit!");
    Application.Quit();
}
}

Это код моей домашней страницы, который я только поместил в поле InputField 'ipField'. Отсюда я хотел бы перенести его на

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.Networking;
using UnityEngine.UI;

public class Registration : MonoBehaviour
{
public InputField nameField;
public InputField passwordField;
public Text error1 = null;
public Text error2 = null;

public Button submitButton;

readonly string postUrl = "http://localhost/sqlconnect/register.php";

мою страницу Registration.cs. Это всего лишь часть кода, я ставлю только соответствующую часть. То, что я хочу заменить, это «localhost» из строки только для чтения в поле ввода на моей странице Homepage.cs. Есть ли решение для этого?

1 Ответ

1 голос
/ 04 февраля 2020

Да, есть несколько способов. Один из них может использовать FindObjectOfType для получения ссылки на компонент Homepage. Затем вы можете получить доступ ко всем public членам, как в вашем случае ipField, который является InputField, так что вы можете просто прочитать его InputField.text

ipAddress = FindObjectOfType<Homepage>().ipField.text;

В случае, если в любом случае есть только один экземпляр Homepage.


Если возможно, вы должны напрямую ссылаться на него в Registration, используя public или [SerializeField] private поле типа

public class Registration : MonoBehaviour
{
    // Reference this via the Unity Inspector by drag&drop the according GameObject here
    [SerializeField] private Homepage homepage;

    private void Awake()
    {
        // You could still have a fallback here
        if(! homepage) homepage = FindObjectOfType<Homepage>();
    }

    ...
}

, а затем позже просто используйте

ipAddress = homepage.ipField.text;

Обратите внимание, что FindObjectOfType завершится неудачно, если соответствующий объект неактивен или compomemt отключен!


Вы также можете go придумывать и соблюдать принципы инкапсуляции, предоставляя public только очень необходимую вещь, используя свойство только для чтения

public class Homepage : MonoBehaviour
{
    // This still allows to reference the object in the Inspector 
    // but prevents direct access from other scripts
    [SerializeField] private InputField ipField;

    // This is a public ReadOnly property for reading the IP from other scripts
    public string IP => ipField.text;

    ...
}

Тогда обратно в Registartion вы просто использовали бы

ipAdress = homepage.IP;

Наконец, указав c для поля IP / URL, вы можете использовать Regex , чтобы проверить правильность ввода .

...