ゲームをプレイする画面からセーブとロードする画面はメモリの関係からシーンをまたぐ仕様にした方が良い場合があります。
しかし、Unityではシーンをまたぐと変数が初期化されてしまうためプレイヤーのHPやレベルなどを保持することができません。
Unityでスクリプトを記述しているときに、Sceneを切り替えても前のシーンでの変数を引き継ぎたい。スクリプトを複数に分けて書くときに、他のスクリプトの変数を現在のスクリプトで取得したい。
このように変数を共有・受け渡す場合には、変数の前にアクセス修飾子を付ける必要があります。
Unity(C#)の文法では、intやfloatなどのC言語やPythonと同様に使用される変数の型の他に、
[SerializeField]やpublic、privateなどを使用し、これらをアクセス修飾子と呼びます。
アクセス修飾子はUnity(C#)だけではなく、JavaやC++などにもpublicやprivateなどがあります。
アクセス修飾子を使わずにUnityを使うことはできないです。
本記事では、Unityでよく使う[SerializeField]やpublic、privateについて理解しつつ、Unityでゲーム開発をする際にいつ使うのか、使い分けを紹介します。
- Unityで変数を共有したい。
- アクセス修飾子について知りたい。
アクセス修飾子

アクセス修飾子は、オブジェクト指向のプログラミング言語(Java・C++・C#・Python・Rudy・Swift etc.)において、クラスのメンバー(変数やメソッド)へのアクセス範囲を制御するために使用されるキーワードです。
参考サイト:「アクセス修飾子 – C# プログラミング ガイド」
言語によって使えるアクセス修飾子は違う
Pythonは、オブジェクト指向の言語ですが、前述したようにアクセス修飾子がありません。
オブジェクト指向であっても言語によって使用できるアクセス修飾子は異なります。
以下に、各言語で使用できるアクセス修飾子をまとめました。
| 言語 | private | public | protected | default | internal | protected internal | fileprivate | open |
| Java | ○ | ○ | ○ | ○ | × | × | × | × |
| C++ | ○ | ○ | ○ | × | × | × | × | × |
| C#(Unity) | ○ | ○ | ○ | × | ○ | ○ | × | × |
| Python | × | × | × | × | × | × | × | × |
| Rudy | × | × | × | × | × | × | × | × |
| Swift | ○ | ○ | × | × | ○ | × | ○ | ○ |
表に示したように、PythonとRudyはアクセス修飾子を使用しません。
Unityは、C#をもとにして開発し、使用できるアクセス修飾子は5つあります。
一般的に使用されるのは、PublicとPrivate、Protectedです。

個人的な意見として、UnityにおいてPublicとPrivateを押さえれば、大丈夫です。


