この記事は前回記事の修正版です。
一部アセットの使い方を間違えていたため、改めて使い方を調べました。
前回の記事はこちら
Unityで作成したゲームでアセットを保護する – Sheltie Garage Tech (sheltie-garage.xyz)
改めて、目的をおさらいする
このアセットを利用する目的は「アセットの保護」することです。
Unityで作成されたゲームはツールを利用することで比較的簡単に中身を取り出せます。
これが、有償で購入したモデルだったり、自分で作成したコンテンツだったりすると、それを抜き出されて使用される恐れがあるわけです。
そのような事態を防ぐために、手軽にアセットを暗号化して簡単に中身が取り出せないようにするアセットが今回紹介する「Encrypter」になります。
ステップバイステップでEncrypterを使ってみる
検証環境は以下になります。
・Windows11
・Unity 2023.1.17f
まずはUnityちゃんアセットを読み込み、配置しただけのシーンを作成し、ビルドを行います。
スクリプトバックエンドは「IL2Cpp」に設定しています。
この状態でツールを利用し、アセットを解析します。
オブジェクトのメッシュ形状が確認できる状態となってました。
もちろん、エクスポートもできます。
エクスポートしたファイルをblenderで読み込んだもの。
形状がきちんと再現されました。
こうなれば、このモデルをもとに新しいモデルを作成することもできますね。
今回は例として3Dモデルを挙げましたが、音声やテクスチャも出力することができます。
もしデータの流用を可能な限り防ぎたい場合、アセットを保護する必要があります。
Encrypterを導入する
プロジェクトにEncrypterを導入します。
以下がインポートが終わったら「Tools > Encrypter > OpenWindow」を選択し設定画面を開きます。
Encrypter設定画面の新規作成ボタンを押した直後の状態です。
DLCは今回使用しないので削除しておきます。
Mainと書かれているボタンをクリックすると、設定が開きます。
ターゲットアセットにunitychan_dynamicをドラッグアンドドロップします。
この操作で、以下のような画面になります。
この状態でアセットをビルドします。
ビルドが完了すると、Assetsディレクトリ配下にファイルが作成されます。
Encrypterアセットのプレハブにキーデータを設定します。
以降、Unityちゃんは暗号化されたアセットから読み込むことになります。
読み込むためのC#スクリプトを作成します。
今回はスクリプト名を「AssetLoader」とし、中身は以下のようにしました。
using UnityEngine;
using IKA9nt.Encrypter;
public class AssetLoader : MonoBehaviour
{
public EncryptAsset<GameObject> unityChan;
void Start()
{
Instantiate<GameObject>(unityChan);
}
}
シーン内に配置したunitychan_dynamiのプレハブを削除し、Empty Objectを作成します。
作成したEmpty Objectに先ほど作成したAssetLoaderスクリプトをアタッチし、GameObjectにunitychan_dynamicプレハブを設定します。
この状態で改めてプロジェクトをビルドします。
ビルドされたファイルを実行すると、unityちゃんが表示され、各種ボタン類も正常に動作していることがわかります。
この状態で、再度ツールを利用してアセットを解析してみます。
先ほどと異なり、unityちゃんに関連する3Dオブジェクトが見えなくなりました。
これであれば、簡単にアセットを竜良くされることはなさそうですね。
以上
Encrypterの使い方を紹介しました。
プレハブ単位であれば、利用も簡単なのでアセットを簡単な手順で保護することができそうです。
データ保護の観点からも、今後一般公開する予定のあるゲームについては積極的に利用したいと思いました。
本記事内で「ユニティちゃん」が使用されてます。ライセンス表記は以下になります。
© Unity Technologies Japan/UCL