Unity Asset Portal beta

menu

アセット触ってみたシリーズ:悪い言葉をはじけ!「Bad Word Filter PRO」

執筆者:一條貴彰
2017.06.12

最近のスマホアプリでは、個人のゲームアプリにもSNS的なアプローチを入れる作品が現れてきました。例えば2016年にヒットした『ひとりぼっち惑星』は、アプリ内でメッセージを入力して発信するとどこかのだれかに届くというランダムメッセージ機能のあるゲームシステムが特徴的でした。
ほかにも自分でゲーム内のシナリオを作って共有できる機能や、アプリ内のスクリーンショットの撮影後にメッセージを添えて配信できる機能など、ユーザー同士の交流を目的としたシステムを備えたゲームが今後のトレンドになるのではないか、と考えています。
しかし、そうしたシステムを提供するときに問題になるのが、ユーザーによる「場にそぐわない言葉や悪意を持った言葉」をどうフィルタするかという問題です。

そこで!そうしたSNS的機能があるアプリに使える、使って欲しくない言葉のフィルタシステムを提供するアセット「Bad Word Filter PRO」をご紹介します。

使って欲しくない言葉をフィルタする「Bad Word Filter PRO」

Bad Word Filter PROアセットストア

ストアリンク

無印版

Bad Word Filter PROは、その名の通り使って欲しくない言葉をフィルタするアセットです。
ゲームにSNS的機能を導入した際のトラブルを未然に防ぐため、プレイヤーが使って欲しくない言葉を含んだメッセージ等を投稿する前に確認・ブロックします。

通常版とPRO版がありますが、PRO版は実行部分がDLL化されておらず、C#の実装を全て読むことができますので、開発規模に応じてお選びください。また、本アセットはPlay Makerとの併用にも対応しており、専用のクラスが用意されています。

まずは性能をテスト

まずはBad Word Filterがどのような機能を持っているかテストをしてみます。Bad Word Filterのパッケージをインポートすると、メニューにTools -> Bad Word Filterメニューが追加されます。ここから「Configuration」をクリックして設定画面を開きます。

Configurationを開く

動作をテストするために、「Test-Drive」タブを選択します。
はじめに現在のシーンへBad Word Filterのオブジェクトを作る必要がありますので、黄色い「Add BWF」ボタンをクリックします。

AddBWF

するとヒエラルキーにBWFオブジェクトが生成されます。
これで、このシーンでフィルタ動作のテストができるようになりました。

TestDrive

続いて「Input Text」欄にフィルタしたい言葉を入れて、左端の「Contains」(含んでいるか判定)ボタンをクリックしてみましょう。

フィルタテスト

定番の汚い言葉 を入れてみましたが、無事判定「true」をいただきました。
なおモザイクは画像加工で入れており、Unity エディタ上でこうなるわけではなりません。実際の「Input Text」欄は丸見えです。

フィルタテスト英語

英語でも同様の判定を得ることができました。
次に、「Get」ボタンをクリックしてみます。そうすると、文章の中から汚い言葉だと判定されたワードがピックアップされます。

フィルタテストGet

入力されたメッセージの中で、いったいどの言葉がNGと判定されたのかを確認するためにダイアログを表示する場合は、このGetを利用します。

「Replace」をクリックすると、汚い言葉に当該する部分を「*」でマスクしてくれます。

フィルタテストReplace

再入力を求めるのではなく、強制的にマスクした状態で投稿させる手法の時にはこちらです。

「Mark」をクリックすると、汚い言葉をHTMLタグで囲んでくれます。

フィルタテストMark

初期設定ではcolor = redで、これをこのままUnityのTextに渡すと囲んだ部分が赤く表示されます。
入力された言葉のうちどの言葉がNGと判定されたのかを明示したい場面ではこのオプションが使えるでしょう。

スクリプトから利用する

さて、Bad Word Filterの挙動が分かったところで、実際にスクリプトから呼び出して使ってみましょう。
まずUI -> Input Fieldでテキストボックスをシーンに作成します。次に空のゲームオブジェクト作り、以下のテストスクリプトをアタッチします。


using Crosstales.BWF;
using UnityEngine;
using UnityEngine.UI;

public class Test : MonoBehaviour
{
    public InputField inputField;

    public void Update()
    {
        inputField.text = BWFManager.ReplaceAll(inputField.text);
    }
}

インスペクタ上でinputFieldのフィールドへ先ほど作ったテキストボックスの参照を入れてから、プレビュー再生ボタンをクリックします。テキストボックスに言葉を入力すると、リアルタイムで使って欲しくない言葉に対して***のようなマスクが入るようになります。

テスト

ReplaceはUpdate内にやる必要はなく、ボタンを押したら置き換わるという実装も可能です。

Fuzzyオプションを利用

簡単なテストが終わったら、次はオプションを見ていきましょう。
BWFゲームオブジェクトの子には、機能ごとにマネージャークラスがぶら下がっています。中からBadWordMangerを選択し、インスペクタを確認します。
置き換える文字の設定や、HTMLでマークする場合の設定等はここから可能ですが、下の方の「Fuzzy」にチェックを入れます。

BadWordManger

これは、汚い言葉の判定をファジーにするか否かの設定で、おそらく日本語での利用はほぼ必須になります。なぜなら、日本語は他の言語と異なり単語の間をスペースで区切らないため、Fuzzy機能を有効にしないとほとんどフィルタが機能しないからです。

日本語Fuzzyなし
日本語Fuzzyあり

例によって、モザイク処理は後からの画像加工です。「この」が巻き込まれてReplaceされてしまっていますが、文脈の判断は少々苦手のようです。

フィルタを追加する

フィルタの追加方法も非常に簡単です。
まずUTF-8フォーマットのテキストファイル(拡張子.txt)Assets/Resources/Filters下に配置し、フィルタしたい言葉を一列に書きます。

カスタムフィルタのテキストファイル

#で区切ると以降の文字はコメントとして無視されます。

作ったファイルの読み込みは、BWFオブジェクトの子にあるBadWordProviderTextクラスで管理します。
「Souces」リストに初期設定ではglobal,names,emojiが設定されていますので、このリストに要素を増やし、先ほどのテキストファイルを設定します。

カスタムフィルタの作成

BadWordProviderTextの設定が終わったら、プレビュー再生を行って文字を入力してみます

カスタムフィルタのテスト

リストに書き込んだ文字が伏せられるようになっていれば、成功です。

まとめ

Bad Word Filterは導入とカスタムの手間が非常に少なく、お勧めできるアセットです。
他の機能としては、URLやメールをフィルタするDomainフィルタ、大文字を検出するCapitalizationフィルタ、「!!!!!」「????」などの記号や句読点を検出するPunctuationフィルタなど、多数の機能を揃えています。
残念ながら電話番号をフィルタするオプションはありませんが、それはカスタムフィルタで作ることができそうです。

そして「Bad Word Filter」はWeb GLにも対応しており、それを活用したデモページがあります。
https://www.crosstales.com/media/data/assets/badwordfilter/webgl/run.html

目に触れさせたくない言葉をマスクし、炎上を未然に防ぐBad Word Filter
もしアプリにSNS的な機能を入れる場合は、ぜひ導入を検討してみて下さい。

この記事を書いた人

一條貴彰

一條貴彰株式会社ヘッドハイ 代表取締役

ゲーム作家・Game DevRel。小規模ゲーム開発者がもっと活躍できる世の中作りを目指して、ゲーム開発ツール・サービス専門のDeveloper Relation事業を行っています。ゲーム作家としての代表作は『Back in 1995』(Steam)。