UnityのC#の変数と演算子
UnityのC#の変数について紹介していく。C#でのスクリプトの開き方や基本的な構文の作り方がわからない場合は先に以下の記事を確認するのをおすすめする。UnityのC#の書き方
また、Unityの基礎知識や操作などがわからない場合は先に以下の記事を確認してほしい。
Unityの基礎まとめ
この記事ではC#の変数の型、変数の計算や条件分岐に必要となる演算子、スコープなどについて詳しく紹介していく。
UnityのC#の変数目次
変数とは変数の型について
変数の使い方
演算子について
変数の使えるスコープ(範囲)
目次にもどる
変数とは
変数とは数字や文字などのデータを格納できる「箱」である。データを渡したい場合や保存したい場合に重宝する。
ゲーム制作であれば、キャラや敵のHPや攻撃力といったステータスの記録はもちろん、計算やゲームオブジェクトの操作などあらゆる場面で変数を使用することになる。
C#の基礎の中の基礎と言える内容なので、必ずマスターしたい。
目次にもどる
変数の型について
変数には以下のような型が存在する(他にもたくさんあるが基本的なものを紹介する)。値型
型名 | 入れられる形 |
---|---|
int | 整数 |
float | 浮動小数(7桁まで有効) |
double | 浮動小数(16桁まで有効) |
bool | true(真)またはfalse(偽) |
参照型
型名 | 入る形 |
---|---|
string | 文字列 |
object | オブジェクト型 |
値型と参照型については意味がわからない人も多いと思うが、2種類の型に分かれているということだけわかればひとまずOKだ。
変数の型によって入れられる形が異なるということだけ理解してほしい。
例えば、intは整数なので、文字列や小数のデータを入れることはできない。
目次にもどる
変数の使い方
変数の使い方の一例を紹介する。例えば以下のように書く。int hensuurikai = 5;
先ほど紹介した「int」が最初に書かれている。整数が入る変数を作成するという宣言である。
「hensuurikai」は自分が勝手につけた名前である。名前は何でもつけられ、今回は説明用なので適当な名前だが、後から見た時に何を入れた変数なのかわかるような名前をつけることを心掛けよう。
その後にある「=」は代入を意味する演算子(同じという意味ではないので注意)。
つまり、hensuurikaiという整数が入る箱を作り、その中に5を入れるという命令である(命令なので最後に;がつく)。
目次にもどる
演算子について
代入を表すのが「=」であることは前述した。代入以外にも様々な演算子がある。変数の値を操作したり、条件分岐(別記事で詳しく紹介)など様々な場面で使用する。中でも非常に重要なものを紹介していくので、よく確認してほしい。算術演算子
式の例 | 意味 |
---|---|
a + b | aにbを加算する |
a - b | aにbを減算する |
a * b | aにbをかける |
a / b | aをbで割る。 |
a % b | aをbで割った余り(割り切れる場合は0を返す)。 |
代入演算子
式の例 | 意味 |
---|---|
a = b | aにbを代入する |
a += b | aにbを加算した値をaに代入する |
a -= b | aにbを減算した値をaに代入する |
a *= b | aにbをかけた値をaに代入する |
a /= b | aをbで割った値をaに代入する |
a %= b | aをbで割った余りをaに代入する |
代入以外の代入演算子は = が全部右に来る。そして左には算術演算子が来ると考えれば覚えやすいはず。
インクリメント
式の例 | 意味 |
---|---|
++a | aの値を+1 |
別の記事で紹介するがfor文(ループを記述する)でよく使われる。
++aであれば演算を先に行うが、a++と書いた場合は演算以外の処理を先に行ってから後で演算を行う。
デクリメント
式の例 | 意味 |
---|---|
--a | aの値を-1 |
別の記事で紹介するがfor文(ループを記述する)でよく使われる。
--aであれば演算を先に行うが、a--と書いた場合は演算以外の処理を先に行ってから後で演算を行う。
等値演算子
式の例 | 意味 |
---|---|
if( a == b ) | aとbが等しいなら |
if( a != b ) | aとbが等しくないなら |
== は等しい、!= は等しくないということを示す。
等しい等しくないだけでは何をすればいいのかがわからないのでプログラムは動作せずエラーとなる。
よって、式の例では前にif文をつけている。ifは命令の一つで「もし~なら」という意味を持つ(別の記事で詳しく紹介する)。
比較演算子
式の例 | 意味 |
---|---|
if( a < b ) | aよりbが大きいなら |
if( a > b ) | bよりaが大きいなら |
if( a <= b ) | bがa以上なら |
if( a >= b ) | aがb以上なら |
「以上」が「大きい」と異なるのは数値が同じでも条件を満たす点である。
論理演算子
式の例 | 意味 |
---|---|
if(a = 5 && b = 3) | aが5かつbが3なら |
if(a = 5 || b = 3) | aが5またはbが3なら |
if(a = !5) | aが5でないなら |
上記の演算子については必須級と言え、覚える必要がある。だが、ここで一気に覚えるのは難しいので、作業しながら覚えていこう。
目次にもどる
変数の使えるスコープ(範囲)
ここまで学んだことを用いて変数の計算をしてみよう。新しいスクリプトを開いてクラスの中を以下のように記述してほしい。
クラス内のメソッドの外に以下のように記述
int classnaka = 1;
string classnaka2 = "mozi";
Startのメソッド内に以下のように記述
classnaka += 3;
Debug.Log(classnaka);
Updateのメソッド内に以下のように記述
Debug.Log(classnaka2);
この状態でゲームオブジェクトにスクリプトをアタッチし、再生してコンソールウィンドウのログを確認しよう。
一番最初に流れるログは4である。
メソッドの外で「int classnaka = 1;」と変数を宣言し、1が代入されている。そしてStart(クラスがインスタンス化し有効である場合にUnity側から1回だけ呼ばれる)メソッド内で「classnaka += 3;」と記述されており、1が代入されたclassnakaに3を足した値がclassnakaに代入されている(つまり4が代入されている)。その下はDebug.Log(classnaka);となっており、classnakaの変数に代入されている4がログとして流れてくる。
同様にクラス内メソッド外でstring classnaka2 = "mozi";と記述し、classnaka2にmoziという文字列を代入している。そしてUpdate(クラスが有効である場合に毎フレームごとにUnity側から呼ばれる)メソッド内にDebug.Log(classnaka2);と記述しているので、4のログが出された後はmoziというログが大量に流れてくる。
このことからクラス内で宣言した変数はクラス内ならどこでも使える(メソッドの中でも使える)ことがわかる。
次にstring classnaka2 = "mozi";の記述をクラス内メソッド外からStartのメソッド内に移動させて見よう。
一見、Startのほうが早く呼び出されるので問題なさそうだが以下のようにエラーが出る。
メソッド内で宣言した変数が使えるのはそのメソッドの中だけである。Startメソッドで宣言した変数はUpdateでは使えずログが出せないためエラーとなる。
また、以前の記事でも紹介しているが、プログラムの実行順序はメソッド内では上から下となる。メソッド内で宣言した変数はその下からしか使えないので注意(例えばメソッド内で変数aの計算→変数aの宣言の順序にしてしまうとエラーとなる)。
以上のような変数を宣言して使える範囲をスコープと呼ぶ。
同じスコープ内だと同じ名前の変数は使えないが、異なるスコープであれば同じ名前の変数を使うことができる。