所以我正在尝试编写一个可以限制我访问某个URL的Unity3d项目。例如,如果我想阻止Youtube.com,它将阻止我从所有浏览器访问youtube.com。
我在C#程序中看到你可以使用System.Windows.Form类来完成它。但Unity3D无权使用System.Windows.Form。是否有任何内置方法可以使用unity3d阻止URL?
任何建议将不胜感激。谢谢。
答案 0 :(得分:1)
是否有任何内置方法可用于阻止URL使用 unity3d?
否强>
没有内置方法可以做到这一点。你必须自己创建一个。
要做到这一点,请通过位于
的 hosts 文件C:\Windows\System32\drivers\etc
在此文件中添加要阻止的网站的示例:
阻止stackoverflow:
127.0.0.1 www.stackoverflow.com
阻止Google:
127.0.0.1 www.google.com
将其置于代码中:
1 。从C:\Windows\System32\drivers\etc
逐行读取File.ReadAllLines
的主机文件:
string[] hostData = File.ReadAllLines(Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.System), "drivers/etc/hosts"));
2 。将hostData
数组转换为List
,其中包含:
List<string> hostDataList = new List<string>(hostData );
3 。要添加网址,只需创建一个以字符串(网址)作为参数的函数。如果有网址,请从该网址中删除http
。
循环遍历hostDataList
列表,并通过String.Contains
检查,确保您要添加的网址不存在。如果不存在,请将其添加到列表中:
string urlToBlock = "127.0.0.1" + " "+ url;
hostDataList.Add(urlToBlock);
4 。要删除网址,只需创建一个以字符串(网址)作为参数的函数。如果有网址,请从该网址中删除http
。
循环浏览hostDataList
列表,确保您要添加的网址存在。如果它不存在,请返回。如果存在,请找到索引,然后将其从List
:
int index;
//Make sure that the Url exist before removing it
if (containsUrl(url, out index))
{
hostDataList.RemoveAt(index);
}
注意:
containsUrl
函数只是循环遍历hostDataList
列表的函数,然后检查是否找到了提供的字符串。如果找到则返回true
并将找到该字符串的索引存储到out
索引参数中。
这是原型:
bool containsUrl(string url, out int index){...}
5 。完成后,将hostDataList List
转换回数组,然后使用File.WriteAllLines
保存,保存它。
string savePath = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.System), "drivers/etc/hosts");
string[] hostDataArray = hostDataList.ToArray();
File.WriteAllLines(savePath, hostDataArray);
我知道这是有效的,因为我以前做过。回答这个问题,您应该能够在Windows上完成这项工作。
通知:
要使其正常工作,您的应用程序必须以管理员权限运行。有很多ways来做这件事。
如果从Unity编辑器进行测试,请右键单击Unity徽标,然后选择以管理员身份运行。