Удалось решить проблему вызова метода из другого скрипта, проблема заключалась в том, что мне пришлось создать объект и присоединить к нему API.cs.Затем мне также пришлось перетащить этот объект в открытое поле caller.cs в инспекторе.
Звучит неправильно, перетаскивая скрипт вручную в редакторе, поскольку ваша цельделать из скрипта.Сценарий API
является MonoBehaviour
, потому что он происходит от него.Используйте AddComponent
, чтобы добавить класс API
, затем вызовите StartCoroutine
для функции входа в систему.
API api = gameObject.AddComponent<API>();
StartCoroutine(api.Login("foo@boo.com", "####"));
Удалите MonoBehaviour
, чтобы вам не приходилось присоединять скрипт API к GameObject.вместо этого создайте new
объекты с новым ключевым словом.
public class API
{
public IEnumerator Login(string email, string psw)
{
....
}
}
Нет, вы можете просто сделать:
API api = new API();
StartCoroutine(api.Login("foo@boo.com", "####"));
Наконец, чтобы вернуть значение, добавьте Action
в качестве третьего параметра.
public class API
{
public IEnumerator Login(string email, string psw, Action<string> token)
{
string URL = "https://####.azurewebsites.net/api/login";
WWWForm form = new WWWForm();
form.AddField("email", email);
form.AddField("password", psw);
var download = UnityWebRequest.Post(URL, form);
// Wait until the download is done
yield return download.SendWebRequest();
if (download.isNetworkError || download.isHttpError)
{
Debug.Log("Error downloading: " + download.error);
}
else
{
JsonData data = JsonMapper.ToObject(download.downloadHandler.text);
string tokenResult = (string)data["success"]["token"];
Debug.Log(tokenResult);
if (token != null)
token(tokenResult);
}
}
}
Чтобы вызвать его из функции без сопрограмм:
API api = new API();
StartCoroutine(api.Login("foo@boo.com", "####", (token) =>
{
Debug.Log("Token: " + token);
}
));