【发布时间】:2019-03-04 23:48:08
【问题描述】:
我正在使用以下脚本检查互联网连接:
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class CheckInternets : MonoBehaviour
{
private string url = "some photo on my google drive";
private string wwww;
public static bool InternetON = false;
// Start is called before the first frame update
void Start()
{
StartCoroutine(CheckConnection());
}
IEnumerator CheckConnection()
{
var www = new WWW(url);
yield return www;
if (www.isDone && www.bytesDownloaded > 0)
{
InternetON = true;
Debug.Log("MAIN Script Check :: Online! :)");
}
if (www.isDone && www.bytesDownloaded == 0)
{
InternetON = false;
Debug.LogWarning("MAIN Script Check :: Offline! :(");
}
}
}
在我的(Android)手机上试过这个,连接到移动数据(没有),它工作得很好。
一旦我在其他脚本中引用 InternetON bool 就会出现问题,也就是说,脚本总是将其读取为 false(或者如果我在 CheckInternets.cs 中将其设置为 true),所以我的直觉是我引用错误,或者我没有正确使用布尔值,但无法弄清楚如何。
其他脚本示例:
void Start()
{
if (CheckInternets.InternetON)
{
//do some stuff
Debug.Log("OTHER Script Check :: Online! :)");
}
else
{
//do some other stuff
Debug.Log("OTHER Script Check :: Offline! :(");
}
}
在这种情况下,如果我在线,我的控制台将显示:
其他脚本检查 :: 离线! :(
主要脚本检查 :: 在线! :)
如果我处于离线状态,它会显示他们俩都处于离线状态。
有什么建议吗?干杯!
【问题讨论】:
-
如果这是日志记录的顺序,并且它实际上是按照该顺序发生的,那么看起来其他脚本可能会在此脚本甚至测试/设置之前检查连接。
-
也考虑了这一点,并将
CheckInternets放在脚本执行顺序的顶部,但没有效果——事实上它是列表中唯一的一个(在 Text Mesh Pro 之后那些,由于某种原因我根本无法删除)。 -
您从“其他”脚本中检查得太早,即 Unity 在建立连接之前调用 SomeOther.Start() 方法。您无法通过简单地更改执行顺序来控制连接需要多长时间。无论何时启动协程,只要连接完成,协程就会结束。这就是 Unity 协程背后的理念,它们跨越多个框架(或某个时间框架等)。
-
是的,很明显,我看到控制台日志消息以“错误”的顺序出现,但不知道我能做些什么。在实施@derHugo 的解决方案 1 之后,现在一切似乎都很好。