【Unity】Public変数はこう使う|エディタでパラメータ調整

Public-function Unity development

プログラムからオブジェクトを操作する場合、付いて回るのが、パラメータの調整です。

[プログラムを開く]→[修正]→[保存]→[ゲームプレイ(確認)]という一連のプロセスを繰り返す作業です。

何度も修正する場合は面倒ですね…

そうですね、この方法はあまりおすすめしませんね。

【私自身のハマった経験】
プログラムを変更する過程で、(知らず識らずのうちに)関係のない部分にも変更を加えてしまったことです。色々と同時平行で進めていると、プログラムを開きっぱなしで、他の作業をしてしまうこともあるかと思います。何かの拍子に書き換えてしまい、さっきまで動いていたプログラムがエラーの山。泣きそうになりながらの修正になりました。

そんな経験をしないために、プログラムを開かずとも、パラメータを変更する方法を身につけてもらえたらと思います。ここで登場するのが、Public変数です!

実際に画面操作をしながら理解を深めていただきたく、以下の続きとして解説していきます。
エッセンスだけを知りたい方は、このステップをスキップして本文へお進みください。

【解説画面に沿ってやりたい方】
以下の1記事の内容を実施すると解説するプログラムと同じ状態になります。(必須)
(所要時間:約10分)

▼キーボードからオブジェクトを操作▼

解説画面と全く同じ環境にする場合は、追加で以下の2記事を実施してください。(任意)
(所要時間:約15分)

▼オブジェクトに色を付ける▼

▼オブジェクトが落ちないように壁を作る▼

ここまでで、事前準備は完了したと思いますので、早速解説していきましょう。

今回は、転がる球の速さ(オブジェクトの移動速度)の調整をしていきます。

直接プログラムを操作する場合

比較のために、プログラムから直接パラメータを調整する手順も解説します。
まずはプログラムを見ていきましょう。

プロジェクトウインドウのスクリプト[PlayerController]をクリックして開きます。

今回変更する箇所は、最終行です。
1-Script-point

rb.AddForce(move);
XYZ座標を持つVector3型の変数「move」にキーボードからの上下・左右の入力値が入っています。
その入力値に基づいて、Rigidbody型の変数「rb」に、力を加えて(AddForce)動かすという意味。

つまり、入力値が入っている「move」を変更することで、球の転がる速度が調整できます。

プログラム修正

プログラムに変更を加えていきます。
以下のように、moveに適当な倍率をかけます。

rb.AddForce(move);

rb.AddForce(move*10);
「*」はかけ算を意味します。

これで、元の10倍の速さになります。
プログラムの変更を保存して、ゲームプレイをしてみてください。球が速くなっているのが、ご体感いただけると思います。

それでは早速、本題に入りましょう。

エディタからプログラムを操作する場合

Public変数の利用して、UnityエディタのInspectorウインドウから、数値を操作できるようにします。

Public(アクセス装飾子)
他のクラスからメンバにアクセス(呼び出し)が可能

プログラム修正

speedratioという速度を可変するpublic変数を定義して、それをmoveにかけ算して速度を可変にするプログラムです。

変更するのは以下の枠部の2箇所です。2-Script-edit

変更が完了したら、プログラムの変更を保存します。

エディタからPublic変数を変更

InspectorウインドウでPublic変数が項目として追加されているかを確認します。

プログラムを閉じて、Unityエディタに戻ります。
変更したスクリプトを関連づけているオブジェクトで結果が確認できます。

Hierarchyウインドウで、[Player]をクリックし、Inspectorウインドウの[PlayerController]を確認します。

[Speedratio]という項目が表示されていれば、成功です。3-speedratio-fix

追加したPublic変数を変更して、動きの変化を確認します。
Speedratioがデフォルトでは0(ゼロ)になっているかと思います。先ほどのプログラムを思い出していただくと、rb.AddForce(move*speedratio);になっています。

speedratio=0では、かけ算の結果は0になり、オブジェクトは動きません。

speedratioを適当な数値に変更する必要があります。
数値を変更して、オブジェクト(球)の動きを確認してみてください。

解説では、10を入れました。4-gameplay10

これで、毎回プログラムを開かなくてもパラメータを変更できるようになりました。

これで完成です。お疲れ様でした。

さらに詳しく

その他のアクセス装飾子

頭の整理として、アクセス装飾子をまとめます。

Public:全てのクラスからアクセス可能
Private:同じクラスからのみアクセス可能
Protected:同じクラスとそのサブクラスからアクセス可能

実は先ほどのコードの中には、Privateが使われています。どこだかわかりますか?5-private

そう、見えないPrivateです。変数宣言時に、アクセス装飾子を省略すると、プログラムは自動的にPrivateと判断します。そのため、PublicやProtected以外の場合は、省略しても問題ありません。

どんな時に有効?

PrivateとPublicで言うと、ゲームを共同で開発する時などで、自分が作成したクラスを他の方が使う場合があります。そのような時に、全てPrivateではそもそも使えません。全てPublicではどこを使って良いか迷います。そこで、PrivateとPublicを適切に使い分けることで、Publicだけを使えば良いということをプログラムで伝えることができます。

以上です。

▼ポチッと応援お願いします▼
にほんブログ村 IT技術ブログ Unityへ
にほんブログ村
タイトルとURLをコピーしました