因此,我试图编写一个Unity3d项目,它可以限制我对某些URL的访问。例如,如果我想阻止Youtube.com,它将阻止我从所有浏览器访问youtube.com。
我看到,在C#程序中,您可以使用System.Windows.Form类来完成它。但是Unity3D没有使用System.Windows.Form的权限。有什么内置的方法可以用unity3d来阻止URL吗?
如有任何建议,将不胜感激。谢谢。
发布于 2017-02-20 05:55:37
有什么内置的方法可以用unity3d来阻止URL吗?
No
没有内置的方法来做到这一点。你必须自己创造一个。
在执行此操作时,要通过位于
C:\Windows\System32\drivers\etc
添加要在此文件中阻止的网站的示例
阻止堆栈溢出:
127.0.0.1 www.stackoverflow.com
要阻止Google:
127.0.0.1 www.google.com
将其放入代码中
1.Read主机文件从C:\Windows\System32\drivers\etc
逐行到File.ReadAllLines
string[] hostData = File.ReadAllLines(Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.System), "drivers/etc/hosts"));
2.Convert hostData
数组到List
:
List<string> hostDataList = new List<string>(hostData );
3.To添加url,只需创建一个以字符串(Url)作为参数的函数。如果有一个url,就从该url中删除http
。
循环遍历hostDataList
列表,并确保要添加的url不存在,方法是使用String.Contains
检查它。如果不存在,则将其添加到列表中:
string urlToBlock = "127.0.0.1" + " "+ url;
hostDataList.Add(urlToBlock);
4.To remove url,只需创建一个以字符串(Url)作为参数的函数。如果有一个url,就从该url中删除http
。
循环遍历hostDataList
列表,并确保要添加的url存在。如果不存在,请返回。如果它存在,请查找索引,然后从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.When您已经完成了,通过将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徽标,然后选择Run作为管理员。
https://stackoverflow.com/questions/42336645
复制相似问题