メインコンテンツまでスキップ

コード保護

Starter、Indie、Pro エディションは、エンジンを C# のソースコードではなく、.unitypackage 内の コンパイル済み DLL として提供します。これらの DLL では、エンジンの内部名を難読化しているため、 パッケージをそのまま開いてソースコードとして読み戻すことはできません。 Source と Studio エディションは C# ソースそのものを同梱しているため、ここで説明する内容は当てはまりません。

このページでは、それが実際に何を意味するのかを説明します。エンジンに対してスクリプトを書けるのか、 プレハブやシーンは安全なのか、そして意図的に読める状態のまま残しているものは何か、という点です。

エディション別の内容​

エディションエンジンの提供形態パブリック APIXML ドキュメントデバッグシンボル
Starterコンパイル済み DLL閉じているなしなし
Indieコンパイル済み DLL読めるありなし
Proコンパイル済み DLL読めるありなし
SourceC# ソースソースソースで確認できます該当なし
StudioC# ソースソースソースで確認できます該当なし

Indie と Pro:エンジンに対して通常どおりプログラミングする​

Indie と Pro では、パブリック API は読める状態のままです。型名とメンバー名はリネームされておらず、 パッケージにはその XML ドキュメントも含まれます。IDE では、すべてのパブリックメンバーで オートコンプリート、パラメーターヒント、ツールチップが使えます。他の C# ライブラリとまったく同じです。

パブリック API ではないもの、つまりエンジンの内部は難読化されています。ゲームを作るのにそれらの名前は 必要ありません。公開されている部分が、サポートされている入口です。対象範囲については パブリック API を参照してください。

Starter:API は閉じている​

Starter は評価用エディションなので、パブリック API は閉じています。名前は難読化されており、 XML ドキュメントも含まれません。この API に対して C# を書くことは想定していません。

それでも、Inspector、Hub、ビジュアルスクリプトのグラフが提供するものはすべて使えます。 コンポーネントとアセットは通常の名前のまま残る(次のセクション)ため、シーンやプレハブに追加し、 Inspector でいつもどおり確認できます。エンジンに対して自分のコードを書くには、Indie 以上に移行してください。 エディションの比較はよくある質問にあります。

決して難読化されないもの、その理由​

すべてのエディションで、2 種類の名前はそのまま残されます。Unity 自身がそれらを必要とするためです。

  • UnityEngine.Object から派生するクラスの名前:コンポーネント (MonoBehaviour)とアセット(ScriptableObject)。
  • シリアライズされたフィールドの名前。

Unity はこれらを名前で検索します。フィールド名は、プレハブやシーンのファイルに書き込まれるキーであり、 Inspector で目にするラベルでもあります。これらをリネームしてしまうと、プレハブに保存されたデータが 自分のフィールドを見つけられなくなり、そのプレハブは壊れてしまいます。

プレハブとシーンは安全です

コンポーネント名、アセット名、シリアライズされたフィールド名は決して変わらないため、 エンジンで構築したプレハブやシーンは、難読化の影響を受けません。

その結果は、率直でシンプルです。これらの名前は、Unity が読み取れなければならないため、見えています。 エンジンがあなたのプロジェクトで動作するために、読める状態のまま残さなければならない部分です。

デバッグシンボルなし​

Starter、Indie、Pro のパッケージを開いて確認しましたが、どれにもシンボルファイル (.pdb や .mdb)は含まれていません。コンパイル済みエディションには、デバッガーでエンジンのコードを 1 行ずつステップ実行できるようにするものは何もありません。エンジンの内部をデバッグする必要がある場合は、 そのために Source と Studio エディションがあります。

インポートへの影響はありません​

保護によってパッケージが問題なくインポートできることを確認するため、コンパイル済みの各エディションを 新しい Unity 6 プロジェクトにインポートしました。これをエディションごとに 2 回行いました。