【Unity】C#の変数計算と配列

変数と配列
スポンサーリンク

今回のスクリプト解説記事は「変数計算」と、変数を便利に使うことができる「配列」について書いていきます!

計算や配列は、ゲーム制作でも必ず使うものなので、ゆっくりと理解していきましょう。

POINT!

・変数同士の計算方法を学ぶ
・配列という変数の扱い方があるのを学ぶ

Unityスクリプト入門-記事一覧

変数の計算

まずは変数の計算方法について理解しましょう!

変数の計算は「+(足し算)」「-(引き算)」「*(掛け算)」「/(割り算)」「%(余り)」の5種類が把握できればOKです。

「+」や「-」は見慣れたものだと思います。数学などで「×」を使っていた掛け算や、「÷」などを使っていた割り算が、少し変わっていますので注意してください。馴染みの無いもので「%」の余り計算があると思いますが、稀に使うこともあるのでこの機会に覚えてしまいましょう。

解説のために、以下のサンプルコードをUnityの新規スクリプト作成で作り、空のオブジェクトにアタッチして実行結果をコンソールで確認してみましょう。

※スクリプト作成やアタッチがわからない場合はこちら、コンソールでの確認がわからない場合はこちらの記事を確認してみてください。

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class NewBehaviourScript : MonoBehaviour
{
    int seisu = 8;

    // Start is called before the first frame update
    void Start()
    {
        print("元の整数:" + seisu);

        // 足し算
        seisu = seisu + 5;
        print("加算結果:" + seisu);
        seisu = 8; // 整数のリセット

        // 引き算
        seisu = seisu - 5;
        print("減算結果:" + seisu);
        seisu = 8; // 整数のリセット

        // 掛け算
        seisu = seisu * 5;
        print("乗算結果:" + seisu);
        seisu = 8; // 整数のリセット

        // 割り算
        seisu = seisu / 5;
        print("除算結果:" + seisu);
        seisu = 8; // 整数のリセット

        // 余り算
        seisu = seisu % 5;
        print("余り結果:" + seisu);
    }

    // Update is called once per frame
    void Update()
    {
        
    }

}

※補足「print()」の便利な使い方
上のサンプルコードにある「print(“文字列” + seisu)」のように、好きな文字列の後に「+」で変数を繋げると、文字列と変数の中身を同時に表示させることができます。

ここでの「+」は、加算ではなく文字列との連結を表していますので、混乱しないように注意してください!

まずは計算の動きについて解説です。以下のように、コード上の「=」には、右辺の数字を左辺に入れる効果があるという解説を以前行いました。

計算

今回の「seisu = seisu + 5;」もそのルールに沿っています。プログラム上では以下のような動きになります。

・「seisu(現在の数値は8)」=「seisu(8)」+「5」
・「seisu(現在の数値は8)」=「13」
・右辺「13」を左辺「seisu」に入れる

このようにして、「seisu」は計算結果に置き換わります。加算以外の計算も同様の動きをします。

実際に実行結果の確認をしていきましょう。コンソールのタブを確認することで、以下のような実行結果が表示されていると思います。

実行結果

順番に見ていきます。

・元の整数:8
・加算結果:13
・減算結果:3
・乗算結果:40

このあたりの実行結果は特に問題ないと思います。それぞれ、元の数字「8」に対して、「5」を足したり引いたり掛けたりした結果です。

次を確認してみます。

除算結果:1

この結果は少し、違和感を感じるかもしれません。本来「8 ÷ 5」を計算すると「1.6」になります。しかし実行の結果は「1.6」でもなく、四捨五入された「2」でもありません。これについても解説していきます。

今回の計算には「int型(整数型)」を利用しています。この整数型の特徴として、入ってくる数値の少数部分(今回で言うと「.6」の部分)は無視されるという結果になります。

除算では、整数型を使う場合こういった注意点があり、もししっかりと少数以下の数値を残しておきたいなら、「float型」を使う必要があります。

よく挙動がおかしくなる原因として、この少数部分の切り捨てが原因であったりするということがあるので、しっかり気をつけましょう!(この切り捨てを逆に利用してプログラムを組むこともあります)

注意点を確認できたら次の実行結果を見てみましょう。

余り結果:3

余り計算は、小学校などでやった余りを出す計算と同じです。「8」を「5」で割って、少数を使わずに割り切れなかった余りを計算結果として返します。

以上が計算の方法と結果の確認でした。次の項目では、計算式の別の書き方を説明します。

■覚えるPOINT!
・「seisu = seisu + 5」
右辺の計算結果が左辺に入る。

・「seisu = seisu / 5」
整数型を使っているときの割り算は、少数部分が無視される。

計算の書き換え

上で行った変数の計算を、プログラムでよく使われる形に書き換えてみたいと思います。

seisu = seisu + 5;
 ↓
seisu += 5;

書き換えは非常に簡単です。現在の変数の値に数値を加算するなどの計算は、上のように「+= 数値」という書き方を行えば同じ実行結果が表示されます。

他にも「-=」「*=」「/=」「%=」など、他の計算も書き換えを行うことができます。どちらかというと、こちらの方がコード上ではよく使われるので、この書き方にも慣れておきましょう!

また特殊な例として、以下の書き方は全て同一の計算結果になります。

seisu = seisu + 1;
seisu += 1;
seisu++;
++seisu;

初めて出てきた「seisu++」と「++seisu」はインクリメント(変数の値を1増やす)という計算になります。変数の前と後ろどちらに「++」がついているかで、「後置インクリメント」「前置インクリメント」と呼ばれたりします。

後置インクリメントと前置インクリメントは、1を増やすという動きには変わりはないのですが、計算の順番が変わってくることもあります。

■サンプル
// 計算順番の確認
int a = 5;
int b = 0;
b = a++;
print(b);

// リセット
a = 5;
b = 0;
b = ++ a;
print(b);

上のサンプルを先程のコードに追加して実行結果を確認してみてください。最初が「5」で次が「6」と表示されると思います。

これは、「=」の計算において、後置インクリメント(b = a++)は「b=a」という値を入れる処理が先に行われ、その後「a」が1加算されているのに対して、前置インクリメントは1加算が行われて結果を「b」に入れているために起こる計算結果の違いです。

インクリメントは、次の記事で解説する繰り返し処理などでよく用いられる書き方ですので、出てきた時に混乱しないようにしっかりと覚えてしまいましょう。

また、1減らす処理を「a–」や「–a」などのように書くこともできます。(※Webの表示の都合上1本の「-」に見えるかもしれませんが「-」の記号を2回繰り返しています)

こちらはデクリメントと呼ばれるので一緒に覚えてください。

※今回の書き換えの項目については、一気に覚えることが増えたと思います。焦らずに、以下のPOINTをしっかり覚えましょう!

■覚えるPOINT!

・よくある書き換え
seisu = seisu + 5;
 ↓
seisu += 5;
上のような書き換えが可能。

・1加算
seisu++; // 後置インクリメント
++seisu; // 前置インクリメント

・1減算
seisu–; // 後置デクリメント(「-」を2回)
–seisu; // 前置デクリメント(「-」を2回)

※後置や前置は数値1の加算と減算という処理には変わりはないが、計算の順番などは変わる。

配列を使う

配列は、変数を扱う上で非常に便利な機能です。例えば以下のように複数の変数を使いたい時があったとします。

int seisu_iti = 0;
int seisu_ni = 0;
int seisu_san = 0;

これが上のように3つだけならまだ書いてしまってもいいかもしれません。しかし、50個や100個などになると、流石に一つずつ書いていくのは手間がかかってしまいます。

そこでC#では、以下のような書き方で、一気に変数を作る方法が用意されています。

int hairetu = new int[5];

変数型 変数名 = new 変数型[作る数];

上の例では5個の変数を1行の宣言で作っています。これを変数の配列と呼びます。(変数名は好きにつけてOKです)

配列は以下の方法で数値を変更することができます。

hairetu[0] = 0;
hairetu[1] = 1;
hairetu[2] = 2;

変数名[番号] = 入れる数値;

注意点として、指定する番号は必ず「0」からスタートすることです。上の例のように5個の配列を作った場合、指定できる番号は「0〜4」の5個になります。

よくあるミスとして、5個の配列を作ったから「hairetu[5]」が扱える、という感覚でコードを書いてしまうことがありますが、エラーでゲームが止まってしまいますので注意しましょう。

■覚えるPOINT!
・「変数型 変数名 = new 変数型[作る数];」で一気に変数が作れる。
・作った変数は「変数名[番号] = 入れる数値;」で書き換えが可能。
・「番号」は「0」〜「番号 – 1」の範囲で指定できる。

まとめ

今回は、計算方法と配列についてまとめました。インクリメントなどの新要素が出てきたので、覚えることが増えたと思いますが、次の記事で解説する繰り返し処理などで使うことになります。この機会にしっかり理解しておきましょう。

また配列については「0」から指定がスタートするなど、少し慣れない感覚があると思いますが、こちらも馴染めるように何回か使ってみましょう!

Unityスクリプト入門-記事一覧