7. Unityの変数と型
7.1 型
例えば以下のような変数を定義したスクリプトがあります。
//整数型の変数intにaとつけて1を入れる
int a = 1;
void Start(){
Debug.Log(a);
}
void Update(){
}
変数についての説明は省略します。intとは変数の種類で"型"と言います。変数の名前は自分で好きな名前を付けられることができます。変数の中身にあらかじめ何をいれるか(初期値)は省略可能です。
7.2 変数の範囲
変数の有効範囲はクラスの中で定義することができ、メソッドのなかでも定義することができます。メソッド内で定義した変数の有効範囲はメソッド内で定義した位置より下になります。例えば以下のプログラムではStartメソッド内で定義した変数bを別のメソッド、Updateメソッドで呼び出すことはできません。
int a = 1;
void Start(){
int b = 2;
Debug.Log(a);
Debug.Log(b);
}
void Update(){
Debug.Log(a);
//エラー メソッド内で定義されていない、かつ他メソッドで定義された変数を呼ぶことができない
Debug.Log(b);
}
また、クラス内の範囲内で変数を定義するときは、その変数を呼ぶメソッドが上に位置しても有効になります。
public class test{
void Start(){
int b = 2;
Debug.Log(a);
Debug.Log(b);
}
void Update(){
Debug.Log(a);
}
int a = 1;
}
メソッド内の変数は、定義した位置の下から有効になります。有効範囲のことをスコープと呼びます。
void Start(){
Debug.Log(a);
Debug.Log(b);
int b = 2;
}
void Update(){
Debug.Log(a);
}
int a = 1;
bを複数定義してもスコープが違うとエラーになりません。同名の変数があった場合、スコープが狭い方が有効になります。
int b = 4;
void Start(){
int b = 2;
Debug.Log(b);
}
void Update(){
int b = 3
Debug.Log(a);
}
int a = 1;
同じスコープ内で同名の変数の定義はエラーになります。
int b = 4;
void Start(){
int b = 2;
int b = 5;
Debug.Log(b);
}
void Update(){
int b = 3
Debug.Log(a);
}
int a = 1;
7.3 基本的な型
基本的な型
int型 |
整数 |
float型 |
有効桁数7桁の浮動小数 |
double型 |
有効桁数16桁の浮動少数 |
char型 |
1文字 |
string型 |
文字列 |
bool型 |
真か偽か |
Transform型 |
位置(Location)、回転(Rotator)、スケール(Scale)を含んだ3Dトランスフォーム |
Vector3型 |
ベクター(x,y,z)を扱う |
string型の変数nameを定義して、初期値を与えます。
string name = "上田次郎";
void Start(){
Debug.Log("私は" + name + "です!");
}
void Update(){
}
ゲームオブジェクトには常にTransformコンポーネントが設定されています。TransformコンポーネントはTransform型の変数から参照されます。
- Transformコンポーネント
- Position Vector3型
- Rotation Quaternion型
- Scale Vector3型
Transform型の変数を参照する場合は以下のように記述します。Transformクラスの中の変数positionにアクセスします。
transform.position += Vector3.right;
- Vector3型
- x float型
- y float型
- z float型
x,y,zで位置を表現します。
7.4 何が値型で何が参照型か
以下の型以外にもありますが、とりあえずここでの整理は、Unreal Engineとの比較の説明もありますので、以下を列挙します。この整理の引用は++C++; // 未確認飛行Cのサイトを参考に、Unityの情報を追加したものになります。サイトのURLを以下に記載しておきます。
値型 |
構造体型 |
struct(Vector3など) |
数値型 |
整数型 |
byte,sbyte,char,int |
浮動小数点型 |
float,double |
bool |
enum |
参照型 |
class(Transformなど) |
interface |
delegate |
object(GameObject) |
string |
配列,List,Dictionary |
メソッド(func,action) |
※ stringは参照型ですが挙動は値型と同じです。
🔗 参考リンク
たのしい工学
【Unityで学ぶ】C#の基本
++C++; // 未確認飛行 C
値型と参照型
7.5 値型で気を付ける事
値型はその変数自身が実データを持ちます。以下のスクリプトにあるVector3型のvはTransform型とは無関係です。
アクセス時間が短いです。軽いデータを扱うときは値型の方が早いです。
Vector3 v;
void Start(){
v = transform.position;
}
void Update(){
v += Vector3.right;
}
7.6 参照型で気を付ける事
参照型はアドレスでデータを扱う型です。実体を1つ持ち、1回の作成で1つ分のメモリを消費します。重いデータは参照型の方を使うことが多いです。
Transform t;
void Start(){
t = transform;
}
void Update(){
t.position += Vector3.right;
}