なぜ型を宣言している変数としていない変数があるのでしょうか? | Unity Forum | Tech Stadium Forum

なぜ型を宣言している変数としていない変...
 
通知
すべてクリア

なぜ型を宣言している変数としていない変数があるのでしょうか?  

  RSS

Student
(@student)
メンバー Moderator
結合: 4年前
投稿: 1325
05/09/2023 7:42 am  

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);
    }
}

引用
Student
(@student)
メンバー Moderator
結合: 4年前
投稿: 1325
05/09/2023 7:42 am  

また、varで宣言している変数はpublicになるのでしょうか? privateになるのでしょうか?
それともその2つとはまた別なのでしょうか?


返信引用
Teacher
(@admin)
メンバー Admin
結合: 4年前
投稿: 1296
05/09/2023 7:43 am  

varは、代入する変数の型が明らかになっている場合に使うことができます。
今回代入するGetAxis(○○)はfloat型であることが明らかになっているためfloat型として扱われます。

また今回宣言した変数はメソッド内で宣言されていますが、こちらはprivate型でさらに宣言したメソッドの中でしか使えません。
(今回はvoid Update(){}の中オンリーということ)

This post was modified 8か月前 by Teacher

返信引用
Student
(@student)
メンバー Moderator
結合: 4年前
投稿: 1325
05/09/2023 7:45 am  

ありがとうございます。
ちなみに、あえて型を宣言しても良いのでしょうか?

例えば
float moveVertical = Input.GetAxis("Vertical");
のような書き方は可能ですか?


返信引用
Teacher
(@admin)
メンバー Admin
結合: 4年前
投稿: 1296
05/09/2023 7:45 am  

それも可能です。
同じような、その場でのみ使えるmoveVerticalという名前の変数ができあがります。


返信引用
Student
(@student)
メンバー Moderator
結合: 4年前
投稿: 1325
05/09/2023 7:46 am  

関数を見ればfloat型であることは明らかなので、手間を省くためにvarにしているということでしょうか?

また、あえて型を宣言することでのメリットなどは存在しますか?
例えば、型が指定さてているとシステム側で型を判断する必要がないので処理が高速化するなど。


返信引用
Teacher
(@admin)
メンバー Admin
結合: 4年前
投稿: 1296
05/09/2023 7:46 am  

floatとvarを使い分ける基準は特にありません。
(コード保存後、Unityエディタ画面に戻ってコンパイルの時に型が何なのか調査が入るため少し遅くなるともいわれています)
ですが、型の名前が物凄く長い場合(十何文字もあるような名前など)、コードがとても長くなってしまうため、3文字のvarを使ったほうがすっきりします。

varを使うか、型の名前をしっかり宣言するかは、そのプログラマーの好みに寄ってしまいます。


返信引用
Student
(@student)
メンバー Moderator
結合: 4年前
投稿: 1325
05/09/2023 7:46 am  

あまり他の言語?に例えるのは良くないのかもしれませんが、varはVBAで言うVariant型みたいなものなのでしょうか?


返信引用
Teacher
(@admin)
メンバー Admin
結合: 4年前
投稿: 1296
05/09/2023 7:47 am  

同じ使い方という考え方で合っています!


返信引用
Teacher
(@admin)
メンバー Admin
結合: 4年前
投稿: 1296
05/09/2023 7:49 am  

プレハブに何か変更を加えた後、その変更を他のプレハブに反映させるためにはOverridesを行わなければなりません。
変更箇所は加えた行が青くなっており、Overrideを行うことでそこの変更が他のプレハブにも反映されます。


返信引用
共有:
タイトルとURLをコピーしました