Unity敏感词屏蔽

Unity敏感词屏蔽
分享一个之前自己写的小例子,我们知道广电关于应用程序的版号审核是
需要进行敏感词审核,所有应用程序中的文字都不能涉及到敏感词汇,所
以敏感词汇的处理是多数应用开发者都会遇到的一个问题,解决方法不尽
相同,在这里分享一下个人在Unity中的处理方法。

先说一下一些必要的知识:

关于Unity3D中的资源路径

Application.dataPath 此属性用于返回程序的数据文件所在文件夹的路径。例如在Editor中就是Assets了。
Application.streamingAssetsPath 此属性用于返回流数据的缓存目录,返回路径为相对路径,适合设置一些外部数据文件的路径。放在Unity工程StreamingAssets文件夹中的资源发布后都可以通过这个路径读取出来。
Application.persistentDataPath 此属性用于返回一个持久化数据存储目录的路径,可以在此路径下存储一些持久化的数据文件。
Application.temporaryCachePath 此属性用于返回一个临时数据的缓存目录。

关于Unity3D中的WWW类

WWW类是一个Unity开发中非常常用到的工具类,主要提供一般Http、
Ftp、File访问的功能(其中我们使用到的是File,访问本地文件功能),以
及动态从网上下载图片、声音、视频Unity资源等。

首先,来看看要进行屏蔽的敏感词汇的处理,我们需要把敏感词汇(敏感
词汇文件可自行进行百度)放在一个txt文件里,并且将其另存为UTF8编
码格式,如图:
这里写图片描述

OK,完成之后,在Unity工程中新建一个名为StreamingAssets的文件夹,
把我们刚刚编辑好的txt文件拖到该文件夹下。

这里写图片描述

接下来,简单创建两个UI,一个为Image+text,另一个是InputFiled

这里写图片描述

其中的IntFiled将接受我们的输入,并进行敏感词汇检测。

创建一个C#脚本,名字随便起,挂在InputFiled下面。
代码如下:

using UnityEngine.UI;
using System.IO;//首先,引入IO流命名空间和UI
string[] SentiWords = null;//定义一个接受文件内容的字符串数组
/// <summary>
/// 使用一个协程来进行文件读取
/// </summary>
/// <returns></returns>
IEnumerator LoadWWW()
    {
        WWW www;
        //不同平台下StreamingAssets的路径是不同的,这里需要注意一下。
        if (Application.platform == RuntimePlatform.Android)
        {

            www = new WWW(Application.streamingAssetsPath + "/" + "SensitiveWords1.txt");
        }
        else
        {
            www = new WWW("file://" + Application.streamingAssetsPath + "/" + "SensitiveWords1.txt");
        }
        yield return www;

        if (!(www.Equals("") || www.Equals(null)))
        {
            Debug.Log(www.text);
            //将读取到的字符串进行分割后存储到定义好的数组中
            SentiWords = www.text.Split('、');
        }
    }
//在Start()函数中开启协程加载文件
void Start () {
    StartCoroutine("LoadWWW");
    //添加输入事件监听
    transform.GetComponent<InputField>().onValueChanged.AddListener(OnValueChanged);
}
/// <summary>
    /// 监听方法,该方法会在监测到输入值改变时被触发
    /// </summary>
    /// <param name="t"></param> 参数为当前输入的值
    public void OnValueChanged(string t)
    {
        if (SentiWords == null)
            return;
        foreach (string ssr in SentiWords)
        {
            if (t.Contains(ssr))
            {
                if (!ssr.Equals(""))
                {
                    Debug.Log("包含敏感词汇:" + ssr + ",需要进行替换");
                    string stt = transform.GetComponent<InputField>().text;
                    int length = ssr.ToCharArray().Length;
                    string s = "";
                    for (int i = 0; i < length; i++)
                        s += "*";
                    Debug.Log(stt.Replace(ssr, s));
                    stt = stt.Replace(ssr, s);
                    transform.GetComponent<InputField>().text = stt;
                }
            }
            //            Debug.Log(ssr);
        }
    }


> 这里需要说明的一点是string类中的静态方法Replace(sting oldValue, 
string newValue),该方法并不会改变原字符串的值,
而是会返回一个替换后的字符串,参数oldValue和newValue的意义是返回值中
原来包含的oldValue将会被替换为newValue,例如:
> string str = "南京,北京";
> string s = str.Replace("北京""上海");
> 这两句话执行之后,我们得到s的值为"南京,上海",而str的值并不会发生改变,依然是"南京,北京"

OK,完成这些之后,来测试一下。。。
这里写图片描述

最后,附上Demo程序和源代码链接:

链接:http://pan.baidu.com/s/1kUL5szl 密码:9kpz

  • 6
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
Unity中的ZFBrowser是一种内嵌的浏览器控件,可以在Unity项目中显示网页内容。如果想要屏蔽右键的功能,可以通过以下步骤实现。 首先,需要在Unity的代码中对ZFBrowser控件进行操作。在控件的初始化过程中,可以添加如下代码: ```csharp ZFBrowser browser = GetComponent<ZFBrowser>(); IntPtr browserHandle = browser.GetBrowserHandle(); //屏蔽右键 SetWindowLong(browserHandle, GWL_STYLE, GetWindowLong(browserHandle, GWL_STYLE) & ~WS_SYSMENU); ``` 以上代码中,通过调用`GetBrowserHandle`方法获取ZFBrowser的窗口句柄,并使用`SetWindowLong`方法屏蔽了右键功能。`GWL_STYLE`和`WS_SYSMENU`是Windows API中定义的常量,用于指定窗口样式。 需要注意的是,为了使用Windows API函数,还需要在代码文件的开头引入以下命名空间: ```csharp using System.Runtime.InteropServices; ``` 另外,为了使用`SetWindowLong`和`GetWindowLong`函数,还需要声明它们的原型: ```csharp [DllImport("user32.dll", CharSet = CharSet.Auto, SetLastError = true)] public static extern int GetWindowLong(IntPtr hWnd, int nIndex); [DllImport("user32.dll", CharSet = CharSet.Auto, SetLastError = true)] public static extern int SetWindowLong(IntPtr hWnd, int nIndex, int dwNewLong); ``` 以上就是利用Unity中的ZFBrowser屏蔽右键的方法。通过获取ZFBrowser的窗口句柄,然后使用Windows API函数对窗口样式进行修改,实现屏蔽右键的效果。
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值