top of page

LessonEX 基礎知識

EX-1 プログラムのルール

EX-1 プログラムのルール

 この教材を読むときに必要な前提知識である「変数」「if文」「関数」について簡潔に解説するページです。教材はこの3つの要素をある程度理解している前提で進むので、自信のない人はここで復習してみましょう。C++の教科書を見た方がわかりやすいはずですが、教科書を開くのも面倒だと思うので…

 まずはプログラムのルールです。

​ C#でもC++と同じように以下のルールのもと、プログラムを書く必要があります。

ルールその1 : プログラムは上から順番に実行される

​ C++と同じでC#のコードも原則、上から順番に実行されます。一見複雑に見えるコードも(基本的には)このルールに則って書かれています。

​ 画像では文章を出力する処理を3つ書いていますが、上から順番に実行されていることがわかると思います。

ルールその2 : コードは半角で書く

​ 全角文字と半角文字は私たちから見ると大した違いではないかもしれませんが、コンピューターから見ると文字コードというものが異なる、れっきとした「違う文字」になります。プログラムは半角で書くようにしましょう。

ルールその3 : 文の最後に;(セミコロン)をつける

​ これもC++と同じです。C#では文の最後に;(セミコロン)をつけることで文が終了したことを表します。日本語で例えるなら句点(。)です。

​ セミコロンをつけないとエラーになるため、セミコロンをつける癖を身につけましょう。

 ここからは実際にプログラムを書いて覚えましょう。

 まずは3D脱出ゲーム編1-1を参考に、新しい3Dプロジェクトを作ってください。

 左上のヒエラルキー内の+ボタンをクリックして「3D Object」→「Cube」を選択してください。シーン上に箱が作成されます。

 Cubeを選択した状態で、右側のインスペクターにあるPosition(座標)を全て0にしてください。

 次は下側のプロジェクトウィンドウの空いている場所を右クリックして「Create」→「C# Script」を選択してください。

 C#スクリプトが作成されるので、わかりやすいように名前をつけておいてください。サンプルでは「Test」にしておきます。

 作成したTestスクリプトをCubeにドラッグ&ドロップしてください。

​ これでスクリプトがアタッチ(接続)され、スクリプトを書くことでCubeを操作できるようになります。

 アタッチしようとするとエラーが出る場合はこちらを参照してください。

 ヒエラルキー(左側のウィンドウ​)でCubeを選択して、インスペクター(右側のウィンドウ)にTestがひょうじされてい

まとめ

 プログラムの鉄則!

その1「プログラムは上から順番に実行される」

その2「コードは半角で書く」

その3「文の最後に;(セミコロン)をつける」

​ これらのルールはコードがどれだけ難しくなっても変わりません!

 まずはここから覚えていきましょう!

EX-2 変数

EX-2 変数

 変数」はプログラムの中で値を格納するために確保した領域のことです。

 

 変数はしばしば「箱」に例えられます。

 変数を宣言することで、箱が用意されます。箱には好きな名前をつけることができます。

 変数を宣言する時は、

  (変数の型)(変数名)(初期値);

 の順番で定義します。

 画像ではHPという名前の箱に100が、MPという名前の箱に50が入っていることになります。

​ さらに新しい箱を用意して、そこにHPとMPの合計を入れることができます。

 =を境に上記のコードは左辺と右辺に分けられます。そして​、右辺の値が左辺に代入されます。これもプログラムの重要なルールです。

​ コードの中では変数を使って四則演算を行うことができます。

​ +が足し算、-が引き算、*がかけ算、/が割り算を行うための演算子です。%は割り算をした余りを計算することができます。

EX41

 +=や*=などと記述することで、計算式を簡略化することができます。

​ HP += 20; とすることでHPに右辺の値(20)を加算するコードを書くことができます。

 四則演算のルールは今まで小学校の算数でやってきたものと同じです(足し算よりかけ算を先に行うなど)

 変数を用いた計算はこの教材でたくさん登場しますので、少しずつ慣れていってください。​

​ 変数にはというものがあります。これは変数に格納するデータの種類をあらかじめ定義しておくためのものです。

 この教材で使われる主な変数の型には以下のようなものがあります。

 int型  :整数を格納する型です(5、10、32など…)

 float型 :実数を格納する型です。上記int型には小数を格納できませんが、こちらでは格納すること

      ができます(1.2、3.14、123.4567など…)

 bool型 :false(偽)とtrue(真)のみ格納できる型です。ゲーム中のフラグ管理によく使われま

      す。(ジャンプ中フラグ、ボスを倒したフラグなど…)

​ string型 :文字列を格納する型です。"(ダブルクォーテーション)で囲んで定義します。

 他にもUnity側で用意した変数の型としてVector3型があります。これはx、y、zという名前のfloat型変数3つをまとめたものです。

 Vector3型の初期値の指定方法は上記と少し違うので注意してください。

 上記で解説していない変数の型も出てきますが、それらは基本的に他のコンポーネントの参照になります。ここでは気にしなくても構いません。

 長々とした説明になってしまいました。

 ここからはプログラムを書いて、先ほど作成したCubeに変化を与えてみましょう。プロジェクト内のTestスクリプトをダブルクリックしてください。Visual Studioが起動します。

 void Start() の {} の中に書いたコードはゲーム開始時に一度だけ実行されます。

​ void Update() の {} の中に書いたコードは毎フレーム実行されます(間隔をあけて何度も実行されます)

​ まずは移動量を定義するfloat型の変数を宣言しましょう。変数の名前はMoveにしておきます。

 変数を新しく作ることをプログラミング用語では「変数を定義する」や「変数を宣言する」と言ったりします。

 // 移動量 と書いてあるコードがありますが、これはコメントと言います。「//」の後ろに書いた文章は、コードをわかりやすくするためのメモの役割になります。コメントの部分には日本語も使えるので、処理がわかりやすいように積極的にコメントを書いていきましょう​。

 次はUpdate の { } の間に処理を書きます。

① まずはVector3型の変数を宣言して、そこに自分の座標を格納します。Unityでは自分の座標を「transform.position」で取得できます。

② 次に取得した座標のYに先ほど宣言したMove変数を加算します。

​③ 最後に加算後の値を自分の座標に代入します。

 少し回りくどい処理になっていますが、Unityでは座標の要素を直接変更しようとするとエラーが出てしまいます。そのため、一度座標を別の場所に格納してから加算して、元の場所に戻しています。

 コードが書けたらCtrl+Sキーを押して保存してください。スクリプトを変更した後は保存しないとゲームに変更が反映されないので注意しましょう。

​ Unityの中央上部にある再生ボタンを押して、ゲームを実行してください。

 ゲームを実行すると、箱が上方向に移動していきます。変数はゲームを作る上で欠かせない要素なので、使いこなせるように練習しましょう。

 ちなみにpositionの要素は変更できませんが、positionを直接変更することはできるので、このような書き方をすると1行で移動処理を実装できます。

 Visual Studioではコードを途中まで入力すると、下に予測変換の一覧が表示されます。

 候補の中から矢印キーで上下に選択して、Enterキーで決定すると、残りの単語が自動で入力されます

​ 予測変換に頼ることでコード入力の時間短縮やミスの削減ができます。積極的に使って慣れていってください。

 今後プログラムを勉強する上で様々な単語(コード)を見ることになると思いますが、単語を完璧に覚える必要は全くありません。​長い単語も前半数文字さえ覚えていれば予測変換に出てくるのです。

 例えば「Instantiate」というコードを入力したい場合、最初の「Inst」程度まで覚えていれば後は予測変換が出てきます。また、単語の意味も同時に表示されます。

​ 「最初の数文字と使い方さえ覚えていればコードは書ける!」ということは、ぜひ覚えておいてください。

Unity Tips!

まとめ

変数は数字や文字列を格納するための箱のようなもの

・変数を作る時は「型」と「名前」を定義する必要がある

・変数の型は変数がどんな種類の値を格納できるかを示すもの

(int…整数 float…浮動小数点 string…文字列 など)

​・変数に値を足したり、変数同士の計算を行うこともできる

・プログラムには「右辺の値を左辺に代入する」というルールがある​

 HP=MP; と記述した場合、HPの値がMPの値と同じになる

 変数はプログラミングをする上の必須要素!たくさん使って覚えていきましょう!

EX-3 if文

EX-3 if文

 if文」は特定の条件を満たした時だけ実行したい処理がある時に使用します。

 ゲームを進行する上で「○○したら、△△する」という処理はたくさん必要になります。例えば「Aボタンが押されたら、ジャンプする」「ボスを倒したら、ファンファーレが鳴る」「自分のHPが0になったら、ゲームオーバーになる」といった感じです。

​ if文は if(条件式){ 実行する処理 } のように記述します。

 上記のif文では「もしHPの値が0と同じになったら」という分岐を作っています。

 ここで注意しなくてはいけないのは int HP = 50; の「=」とHP == 0 の「==」は意味が全く異なるという点です

 int HP = 50; の=は右辺の値を左辺に代入する、という代入の「=」です。

 HP == 0 の==は左辺の値と右辺の値が一致したら、という比較の「==」です。

 最初はどちらを使えばよいか戸惑うかもしれませんが、とりあえず今は「==を使うのはif文の()の中だけ」と覚えておけば間違いありません。

 

​ ここで使っている == は比較演算子と呼ばれ、ここで値を比較することで条件の成立を判定しています。比較演算子には以下のような種類があります。

 それでは実際にコードを書いてみましょう。先ほどEX-2で書いたコードは削除しておいてください。

​ 今回は「エンターキーが5回押されたら、オブジェクトの大きさを2倍にする」コードを書きます。まずはエンターキーが押された回数を記憶するためのint型の変数を宣言してください。

 Update関数内に、エンターキーが押されたことを検知するif文を記述します。

 if (Input.GetKeyDown(KeyCode.Return)){ } と書くことで、エンターキーが押された瞬間のみ実行される処理を作ることができます。

 (変数名)++; と書いている部分はインクリメントと言い、変数の値を+1する処理になります。

 コードが書けたら保存して、ゲームを実行してみてください。Enterキーを5回押すと、オブジェクトの大きさが2倍になります。

 ちなみに if (Input.GetKeyDown(KeyCode.Return)){ } と書くだけで分岐できる理由は、if文が「( )の中身がtrueなら、{ }の中の処理を実行する」という意味だからです。

 なので、処理的には if (Input.GetKeyDown(KeyCode.Return)){ } と

if (Input.GetKeyDown(KeyCode.Return) == true){ }は同じものになります。「== true」の部分はあってもなくてもよいのですが、単純にコードが少なくなるので基本的に省略しています。

 if文には論理演算子というものがあります。​論理演算子を使うことで、if文に複数の条件を指定することができます。

 例えば(条件式A)&&(条件式B) と記述すると、条件式Aと条件式Bの両方の条件を満たす時のみ実行されるif文になります。

 (条件式A)||(条件式B) と記述すると、条件式Aと条件式Bのどちらかの条件を満たす時実行されるif文になります。

 ( ) を使うことで複雑な分岐を作ることも可能です。

 if文は非常によく使う処理です。これをマスターすればプログラミングの基礎はカンペキ!というレベルなので、たくさん練習しましょう!

まとめ

if文を使うとプログラム内で「もし〇〇なら、△△する」といった処理の分岐を行うことができる

 日常生活に例えると「もし雨が降っているなら、傘を持っていく」ように、条件に応じて行動を変えるイメージ

・if文は最初に条件式を記述する必要がある(「もし〇〇なら」の部分に該当)

論理演算子を使うことで「複数の条件を同時に満たす」条件や、「いずれかの条件を満たす」条件を作ることもできる

EX-4 関数

EX-4 関数

 関数」は複数の処理をひとまとめにしたものです。

 例えば「様々なタイミングで五十音を出力したい」という状況があったとします(そんな状況ないだろってツッコミはなしですよ…)

 その時に以下のようなコードを書くと、無駄に長く読みにくいコードになってしまいます。

 また、後から「濁音も出力したい」と思った時にどうなるでしょうか。全てのif文に濁音を出力する処理をわざわざ追加しなくてはいけなくなります。コードが長くなってくると、対象のif文を全て探すのはかなり面倒ですね。

​ ですが、五十音を出力する処理を関数にすればコードを一気に読みやすくすることができます。

​ 以下の画像では五十音を出力するLog関数を作成し、それをエンターキーが押されたタイミングなどで呼び出しています。

 関数は以下の要素で構成されています。

 (戻り値の型) (関数名)  ( (引数) )
 {
  (処理)
 }

 関数は要素が少し多いので、いきなり覚えるのは難しいかもしれません。

 まずは ​ についてみていきましょう。引数は関数に値を教えるためのものです。

 引数は変数の宣言と同じように、型と名前をセットで宣言しましょう。

​ 所持金の増減を行う関数を作ってみましょう。

 所持金の増減を行った後、所持金がログに出力されます。所持金がマイナスになった場合、追加で「お金が足りません」と出力されます。

ひきすう

 関数を呼び出すときに ( ) の中にgetMoneyに代入する値を指定します。

​ 今回はAキーが押された時に所持金が100増加し、Bキーが押された時に100減少します。

 コードが書けたら保存して、ゲームを実行してみてください。

​ キーボードのAキーを押すと所持金が100ずつ増加していきます。Bキーを押すと100ずつ減少していきます。

 何度もBキーを押して、所持金がマイナスになると「お金が足りません」と出力されます。

 引数は ,(カンマ)で区切ることで複数宣言することもできます。

 もう一つの関数の要素として 戻り値​ があります。戻り値を使うことで、関数の実行結果を返すことができます。

​ 以下のコードは、引数に指定した値段の5%オフがいくらになるか返す関数になります。試しに書いてみましょう。

 関数名の前に戻り値の型を指定します。今回はfloat型です。

 戻り値を返すときは return (返したい値); と指定しましょう。

 戻り値を使うときは、関数を呼び出した側に戻り値を受け止めるための受け皿となる変数を用意してあげる必要があります。今回は計算結果を保存するためのfloat型の変数を用意しています。

※ Update関数に書くと毎フレーム実行されるのでStart関数に書いてください

 コードが書けたら保存して、実行してみましょう。ログに計算結果が出力されます。

 戻り値を使うときは必ず return で何かしらの値を返さないといけないので注意してください。

 

 ただし戻り値にあたる部分が void になっている関数は戻り値がありません。戻り値を使わない関数はvoidから書き始めましょう(voidは空っぽ、空虚 という意味です)

 関数は他にも色々あるのですが、この教材を読む分にはこれだけ理解してもらえればOKです。

​ 関数は文章だけで理解するのは難しい部分もあると思いますので、実際にコードを書いて練習してみてください。

まとめ

関数は複数の処理をひとまとめにしたもの

 関数を使うことで同じ処理を何度も書くことなく、使いまわすことができる

引数は関数に値を渡すためのもの

 引数は複数用意することも、用意しないことも可能

戻り値は関数が処理を終えた際に呼び出し元に返す値

 関数の計算結果を返したりすることができる

​ ここまでに説明した内容を使うと、こういった処理を行うことができます。

 このコードはAキーが押されたらHPの値を10減らし、Bキーが押されたら40減らすという処理です。HPがマイナスになってしまうと不自然なため、HPが0未満にならないように調整を行っています。

 

 上記のコードが理解できたら、教材の事前知識はOKです。

​ 3Dアクションゲーム編からUnityの勉強を始めていきましょう!!

河原電子ビジネス専門学校
​ゲームクリエイター科

bottom of page