Unityの玉転がしのコードについて質問です。
なぜ型を宣言している変数としていない変数があるのでしょうか?
speedとrbは型を宣言していますが、
moveHorizontal、moveVertical、movementは型を宣言していないように見えます。
型を宣言していない変数は直後に関数で値を設定していますが、
関数の答えが一定の型になるためわざわざ型を宣言なくても型が推測できるので宣言していないということでしょうか?
using UnityEngine; public class PlayerController : MonoBehaviour { public float speed = 20; // 動く速さ private Rigidbody rb; // Rididbody void Start() { // Rigidbody を取得 rb = GetComponent<Rigidbody>(); } void Update() { // カーソルキーの入力を取得 var moveHorizontal = Input.GetAxis("Horizontal"); var moveVertical = Input.GetAxis("Vertical"); // カーソルキーの入力に合わせて移動方向を設定 var movement = new Vector3(moveHorizontal, 0, moveVertical); // Ridigbody に力を与えて玉を動かす rb.AddForce(movement * speed); } }
また、varで宣言している変数はpublicになるのでしょうか? privateになるのでしょうか?
それともその2つとはまた別なのでしょうか?
ありがとうございます。
ちなみに、あえて型を宣言しても良いのでしょうか?
例えば
float moveVertical = Input.GetAxis("Vertical");
のような書き方は可能ですか?
それも可能です。
同じような、その場でのみ使えるmoveVerticalという名前の変数ができあがります。
関数を見ればfloat型であることは明らかなので、手間を省くためにvarにしているということでしょうか?
また、あえて型を宣言することでのメリットなどは存在しますか?
例えば、型が指定さてているとシステム側で型を判断する必要がないので処理が高速化するなど。
floatとvarを使い分ける基準は特にありません。
(コード保存後、Unityエディタ画面に戻ってコンパイルの時に型が何なのか調査が入るため少し遅くなるともいわれています)ですが、型の名前が物凄く長い場合(十何文字もあるような名前など)、コードがとても長くなってしまうため、3文字のvarを使ったほうがすっきりします。
varを使うか、型の名前をしっかり宣言するかは、そのプログラマーの好みに寄ってしまいます。
あまり他の言語?に例えるのは良くないのかもしれませんが、varはVBAで言うVariant型みたいなものなのでしょうか?
同じ使い方という考え方で合っています!