はじめに
今回はお手軽な海賊版対策として使えるメソッドについて紹介したいと思います!
Twitterをみていたところこのようなツイートを見かけました。
Unityですぐ使える海賊版対策https://t.co/EZgvUJ5evB
— アズマゴロー@個人開発ハクスラモンスターズ (@azumagoro) March 20, 2020
本当に数行でできそうだったので、実際に試してみたいと思います。
メソッドについて
紹介するメソッドはこちら。
public static bool genuine;
アプリケーションが構成された後、なんらかの変更があった場合に false を返します。
Unity - Scripting API: Application.genuine
つまりfalse
の時は海賊版の可能性があるということです。
次に紹介するメソッドはこちら。
public static bool genuineCheckAvailable;
アプリケーションの整合性が確認できる場合は true を返します。
Unity - Scripting API: Application.genuineCheckAvailable
ただ整合性という言葉は正直ピンとこないんですよね。
またこちらの公式の記事をみるとこのように書かれていました。
Application.genuineCheckAvailable は、Application.genuine と一緒に使用して、アプリに一貫性があるかを検証することができます。 Application.genuine へのアクセスは、リソースに負担がかかる操作であるためフレームの更新中やスピードが重視されるコードのときに使用しないでください。
Unity - Manual: Advanced iOS scripting上級者向け Unity モバイルスクリプティング - Unity マニュアル
前半のApplication.genuineCheckAvailable
とApplication.genuine
は一緒に使用的なことが書かれています。
ただ一緒に使ってねというのが次のうちどっちを指すのかはよくわかりませんでした。
if (Application.genuineCheckAvailable) { if (!Application.genuine) { Debug.Log("これは改造版です"); } } or if (!Application.genuineCheckAvailable || !Application.genuine) { Debug.Log("これは改造版です"); }
私的には下のほうなのかなと解釈したのですが、他の日本語のサイトだと上が紹介されていたので上が正しいのかもしれません。
kazupon.org
またこの記事ではAndroid
のみに入れていますが、こちらの公式のドキュメントにはiOS
,Android
ともに使って良さそうな文言が書いてあったので、少なくともUnity2018.4移行なら大丈夫だと思います。
上級者向け Unity モバイルスクリプティング - Unity マニュアル
Unity - Manual: Advanced iOS scripting
やり方
Application.genuineCheckAvailable
の使い方がいまいちですが、次のコードなら間違いはないと思います。
※実際にまだリリースしていないので、確実とはいえません
private void Awake(){ if (!Application.genuine) Debug.Log("これは改造版です"); }
また少し前に紹介したRuntimeInitializeOnLoadMethod
を用いても良いかもしれません。
【Unity】FPSの設定とRuntimeInitializeOnLoadMethodがバッテリーを救う - はなちるのマイノート
これを用いればシーンにオブジェクトを配置しなくともゲームを開始したときに(エディタでも実機でも)自動で実行してくれます。
using UnityEngine; public class Initializer { [RuntimeInitializeOnLoadMethod()] static void Init() { if (!Application.genuine) Debug.Log("これは改造版です"); } }
さらにひと工夫するとしたら、ロード画面など負荷が気にならない箇所でするのもアリかもしれませんね。
さいごに
ただしこの検知をする箇所さえも書き換えられてしまえば意味がありません。
少なくともおまじない的に考えていたほうがよいでしょう。
まずはIL2CPP
にすることが一番の対策になると思うので、まだやっていない方はしてみてください。
ではまた。