【Unity入門】UnityのC#基礎【アクセス修飾子】

今回はアクセス修飾子と言うものを解説したいと思います。

この記事は本のように順を追って解説しています。この記事は途中のページになります。この記事を見ていて、現在の状況がわからない場合や忘れてしまった事などが出てきたら↓のリンクから目次ページへ飛べますので立ち戻って見てください。

<アクセス修飾子とは>

以前の解説で、別のファイルからアクセスするためには公開する必要があり、公開するにはpublicと付ければ良いという話をしていました。

今回はこの公開範囲について解説していきたいと思います。

以前解説した時はpublicというのはclassの横についていました。

public

これはMonoBehaviourを継承しているため、Unity側からアクセスされるのでpublicになっていたんでしたね。

このpublicのように公開する範囲を決める文アクセス修飾子と言います。

実はこれは関数や変数にもつけることができます。

というか、既についているのですが、見えないだけです。よく使用されるので便利にするために「書かない」という省略系を取っているものがあります。

省略されているものを記述すると↓のようになります。

private

private」とついているのがわかりますね。これは公開しないという意味になります。同じファイルからのみアクセスすることができます。

あれ?StartとUpdateはUnity側から呼ばれているんじゃないの?って話なのですが、これらはちょっと特別な扱いになっています。そのため、「private」であるにも関わらずUnity側からアクセスされます。その代わり、「公開」はしていないため、Unity側とこのクラス内以外から呼び出すことはできません。

このように今まで何も書かずに来たところはprivateが入っているのと同じ状態になります。

<アクセス修飾子の種類>

正直、今はまだprivateとpublicさえわかっていればいいのですが、今後突然別の種類が出てきても困るので、一応全部のアクセス修飾子について解説したいと思います。

特別覚える必要はありません。こんなんがあったなーという感じでOKです。なんとなーく思い出せるのであればいざという時にググりやすいですから。

public

アクセス制限がないアクセス修飾子です。これが記述してあるとどこからでもアクセスできます

protected

その型を継承した型からしかアクセスできないようになる修飾子です。

internal

同じアセンブリ(Unityにおけるアセンブリは特別に設定しない限り、同じプロジェクトのスクリプトと言う意味になります。)に書かれた型からのみアクセスできる修飾子です。

protected internal

protectedとinternalを掛け合わせたアクセス修飾子です。同じアセンブリに書かれてかつその型を継承した型からしかアクセスできない修飾子です。

private

その型をメンバに含んでいる場合にのみアクセスすることができます。

<アクセス修飾子を付けられる種類>

名前空間

名前空間にアクセス修飾子はつける事ができません。扱いとしてはpublicと同じ扱いになります。

(メンバでない)型

public、internalをつける事ができます。

Unityにおいてinternalは意図的に特別な設定をしなければならない為。最初は考える必要はありません。意図的に何かしないとpublicとinternalはほぼ一緒です。

クラスのメンバ

public、protected、internal、protected internal、privateをつける事ができます。

目的に応じてアクセス修飾子をつけてください。

<デフォルトのアクセス修飾子>

何も書いていないと、自動的にデフォルトアクセス修飾子が割り当てられます。

(メンバではない)型

internalが割り当てられます。

クラスの子メンバ

privateが割り当てられます。

<公開範囲を指定する意味>

何故このようなアクセス修飾子を使って公開範囲を決めているかと言うと、プログラムを見やすくするためです。

左側のtestClassと言う奴にアクセスしようと別のファイルからtestClass「.」と打つとその中で呼び出せるものが表示されます。Visual Studioはこのように、次に何を書けばいいのかを表示してくれるのでとても便利です。

class access

さて、次に書く文が↑で表示されていますが、A,B,Cは表示されているのにD,Eは表示されていません。このように他のクラス等から参照しようとした時、使える範囲を限定的にできます。

スクリプトをたくさん書いていると以前書いた内容を忘れることが多々あります。そう言った時にきちんと整理整頓してあると、アクセスがやりやすくなります。

もし、チームで開発するかもしれない人は結構重要ですので覚えておいてください。他の人からアクセスされたら困るものは公開範囲をきちんと指定しましょう。

このように、公開範囲をきちんとすると、開発がやりやすくなると思いますので、覚えておくと便利かと思います。


さて、開発をやりやすくする為に公開範囲が大事なのはわかっていただけたと思うのですが、プログラミングをまだ全然書いてないのにこんなこと今覚えてもどう使うかわからないと言う人もいると思います。

では何故、今この公開範囲について解説したかと言うと、この中で「public」だけUnityでは特別な意味を持ってくるからです。

実はその他のアクセス修飾子でもできるのですが、ちょっとレベルの高い事をしないといけない為、今回はスルーして、後々解説したいと思います。

<シリアライズ>

シリアライズというのは、ソフトウェア内部で扱っているデータをそのまま、保存したり送受信することができるように変換することです。

今まで、何かを書いてもスクリプト間のみでしかデータを使用できませんでした。Unityではこの「シリアライズ」をすることによって、様々な事に使用できるようになります。

どのようにすればシリアライズ化されるかというと、一番簡単なやり方が「public」にすることでシリアライズ化する事ができます。「public」によってシリアライズ化できるのは値型の変数のみです。

参照型の変数もシリアライズ化できるものがあるのですが、ちょっと特別な方法を取らないといけないのでまた機会があれば解説したいと思います。

何を言っているのかわからないと思うのでとりあえず、やってみましょう。キーポイントは「publicにした変数はシリアライズ化される」です。

serialize public

↑のようなスクリプトを書きました。publicになっている変数はaのみです。
これだけだとよくわからないのでゲームオブジェクトにこのスクリプトをアタッチしてみましょう。

show inspector public

すると↑のようになりました。

ゲームオブジェクトに貼り付けたスクリプトの下に「A」という奴が登場しています。

これはスクリプトでpublicにした「a」という変数がここに表示されています。

何故か、変数の頭文字が大文字になります。

このように、変数をシリアライズ化すると、インスペクター上で値を編集する事ができるようになります

これに、どういうメリットがあるかというと、例えば、キャラクターを動かす為の計算に「speed」という変数を間にかましてあげる事によって、移動速度を調整する事ができるようにしたとします。この時、このspeedを調整したい時、本来なら、いちいちスクリプトに書いた値を変更して保存して再生を押さないと確認できないのですが、インスペクターからいじれるようになったことで、直接値を調整することができます。

また、逆にDebug.Logでログを表示し続けるとコンソール画面が埋め尽くされてよくわからない事があるので、インスペクターに現在の値を表示させて、値を見るといった使い方もできます。

とりあえず、試しにやってみましょうか。

quaternion rotate

↑のようなスクリプトを書きました。速さの変化をみたかったのですが、移動を早くするとカメラで追えなくなってしまうので回転の速度を変えてみたいと思います。

物体の回転を変えるにはQuaternionというものを使わないといけないのですが、現状ちょっと難しいので、真似して書いてもらえればOKです。

そして、シーン上にCubeを置いて、回転が見えやすいようにTransformのRotationのXを45,Zを45にしています。

setting cube

この状態で再生して、シリアライズ化されてインスペクターに出てきているSpeedの値を調節してみます。

rotate cube change inspector

↑のように画面を見ながら回転速度を変える事ができます。このように色々なものを調節するのに役立ちます。

<まとめ>

Point

・型の公開範囲をアクセス修飾子で指定できるよ!
・変数にアクセス修飾子「public」がついている時、シリアライズ化されるよ!
・シリアライズ化された変数はインスペクターで変更できるよ!

<わからない事があったら>

このサイトの説明ではよくわからなかったとか、もっと知りたい事などがあれば、また別の勉強方法があるので違った切り口を使ってみるのもいいと思います。

<オススメの本>

本で詳しい解説がされているので書籍を買ってみるというのも手の一つです。最近はKindle版があるので届くまで待つ事もなく場所も取らないのでとても良いです。

<オンラインスクール>

オンラインスクールでは人に質問する事ができるので、行き詰まってしまった方にオススメです。 無料体験もあるので試しに見てみるのも手ですよ



タイトルとURLをコピーしました