ゲーム作り

Unityで作るプログラム

お疲れ様です。 せいさくしゃです。

前回は、マテリアルを使って地面やプレイヤーを飾りつけしました。
さて、折角キャラクターを作ったので、今回はそのキャラクターを簡単に動かしてみたいと思います。

今回からは、プログラム(Unity内ではスクリプト)の話も出てきます。
プロフィールでも話しましたが、プログラムはある程度理解している方を想定して書いています。
なので、プログラム自体の基礎の話まではできません
もし、プログラム自体があまり理解出来ていない方は、申し訳ないですがプログラムの基礎の勉強をしてから読むことを推奨します。

今回の成果

プレイヤーの移動の実装

リュウキ

今回は、何を作ったんだ?

今回実装した内容はこちらです。

  • プレイヤー用のスクリプトの作成
  • プレイヤーの移動操作の実装

以上が今回の実装内容です。

ケンタ

ちょっとだけゲームらしくなってきたな。

今回は主にプレイヤーを前後左右に動かす操作の実装をしました。

因みに、前回は単純に「キャラクター」として書いていました。
今回はこのキャラクターをそのまま「プレイヤー」として使いたいと思います。
細かいかもしれませんが、前回との表記の違いに気を付けてください。

今回の解説

スクリプトの作り方

リュウキ

スクリプトを書くって言うけど、そもそもスクリプトってどこにあるんだよ?

キャラクターを動かす等、ゲームに何かしらの動きを与えるためには、スクリプトはほぼ必須になってきます。
そして、スクリプトを書くためには、当然ながらスクリプトファイルを作成する必要があります。
そこで、まずはスクリプトファイルを作成する手順を説明します。

因みに、何度か軽く説明していますが、ここで言うスクリプトとはUnity内のプログラムの事です。

では、実際の手順を説明します。


  1. Projectウィンドウ内の適当な場所を右クリックします。
  2. 出てきたメニューの中から「Create」「C# Script」(Cシャープスクリプト)を選択します。
  3. ファイル名の入力が求められるので、ファイル名を入力します。

これで、スクリプトを書くためのファイルが作成されました。

この時入力したファイル名が、そのままファイル内でのクラス名に使われます
後からファイル名を変えようと思うと、内部のクラス名も手動で変えなければいけません。
なので、ファイル名を付けるときは、ある程度考えてから名付けることを推奨します。

ケンタ

スクリプトファイルは、
「Projectウィンドウ」「Create」「C# Script」
から作ることが出来るんだな。

特に、「Projectウィンドウ」→「Create」からは他にも色々な物が作れるから、覚えておくといいな。

ソウバ

言い忘れていましたが、せいさくしゃがUnityで使うスクリプトの言語は、全て「C#」です。

一昔前は、C#JavaScriptBooの3つの言語が使用可能でした。
しかし、現在はC#以外の言語は廃止が予定されています。
(現に、Unity上からはC#以外のスクリプトファイルは作成できません。)

なので、皆さんもUnityでスクリプトを組む際は、C#を使用することを強く推奨します。

スクリプト内に初めから書かれているものについて

リュウキ

早速スクリプトファイルを開いてみたら、最初から何か書かれてるんだけど、これって何?

では、先程作ったスクリプトファイルをダブルクリックで開きます。

ソウバ

試したことはないですが、もしかしたら作業環境によってやり方等が変わってくるかもしれません。
もし、作業環境の違いでうまく動かないようでしたら、お手数ですが皆さんの環境に適したやり方を調べてみてください。

なお、せいさくしゃの環境では、スクリプトエディタに「Microsoft Visual Studio」を使用しています。

スクリプトファイルを開くと、あらかじめ記述されているものがあります。
これらの簡単な内容は以下の通りです。

  1. 他のライブラリ等を参照する際に記述するものです。
    ここは、必要な時に追加していけばいいので、今回は詳しく触れません。
  2. スクリプトをオブジェクトに設定すると自動で動いてくれるクラスです。
    継承元等は、Unityで使うときに大事になってくるので、クラス名以外はむやみにいじらないようにしましょう。
  3. 主にクラスを初期化する際の関数です。
    このスクリプトを設定したオブジェクトが作られた時、最初に呼ばれる関数です。
  4. 主にクラスを更新する際の関数です。
    オブジェクトが存在する間、毎フレーム呼ばれることになります。(詳しくは後述します)

これらが、あらかじめ記述されているコードです。

ソウバ

コード内の「 |―― 1 ここから ――| 」等のコメントは、下の箇条書きの番号に対応した場所を示すコメントです。

このようなコメントは、本来のコードには書かれていないので、コードを読む際はこのことに注意して読んでください。

この中でも、特に私たちが触る部分が、Start関数Update関数です。
では、このStart関数とUpdate関数について、もう少し詳しく見ていこうと思います。

ケンタ

スクリプトは、作成した時点であらかじめ書かれているコードがあるんだな。
その中でも、Start関数Update関数は特によく使う部分だな。

Start関数とUpdate関数について

リュウキ

さっき言ってた、Start関数とUpdate関数って何のためにあるんだ?

先程、Start関数は初期化の関数、Update関数は更新の関数と軽く説明しました。
しかし、ゲーム作りに馴染みの無い方には、まだピンとこない方もいるかもしれません。
そこで、関数の説明の前に、ゲームが動く仕組みについて先に説明したいと思います。

ゲームが動くのは、端的にいえばパラパラ漫画アニメの動きに似ています。

まず、ゲーム内にある全てのオブジェクトに命令を与えて、オブジェクトは少しだけ動きます。(更新)
全てのオブジェクトが動いた後に、その時のゲーム画面を撮影し、画面に映します。(描画)
この更新から描画までの一連の流れの単位を「フレーム」と言います。

このフレームを短い間隔で無限ループの様に何度も繰り返すことで、実際のゲーム画面で動いているように見える訳です。

ソウバ

以上の様に、本来なら更新用の処理と描画用の処理が存在するはずです。
しかし、Unityの場合はこの描画の部分はUnity側でやってくれます。
なので、私達が書くのは更新(Update)の部分のみになる訳です。

この、フレームの知識を踏まえた上で、Start関数とUpdate関数について詳しく見ていきましょう。

まず、前提としてこれらのスクリプトはオブジェクトに設定して初めて機能します

Start関数は設定したオブジェクトが生成された時に1回だけ呼ばれる関数です。

初めからシーン内に置いているオブジェクトなら、ゲームが始まった時に呼ばれます。
場合によっては、オブジェクトを先に作っておいて、後からゲーム内に登場させることもあります。
その場合は、そのオブジェクトがゲームに登場した時点で呼び出されます。

このStart関数には、オブジェクトの初期値を設定する処理をよく入れます。

ソウバ

余談ですが、この様に作ったオブジェクトを保存したものを「プレハブ」と言います。
そして、作ったオブジェクトを保存することを「プレハブ化」と言います。

このプレハブを作ることで得られるメリットは、主に次の2つです。

1つ目は、ゲームの途中から生成できる事です。
ゲーム内に始めから出さずに、ゲームの途中から登場させたい、という事もあると思います。
その時に、途中から登場させたいオブジェクトをプレハブ化し、後からそのプレハブを生成するという事が出来ます。

2つ目は、複製が簡単な事です。
分かる方も居るかもしれませんが、プレハブはあくまでもオブジェクトの情報を保存したものです。
なので、このプレハブを使えば、同じオブジェクトを複数生成することも可能です。
これを利用すれば、始めからシーン内に複製したオブジェクトを並べることもできます。
さらに、途中から同じオブジェクトをいくつも出すことも可能です。

この様に、プレハブにはオブジェクトを好きなタイミングで使いまわすための大事な要素です。
プレハブについての詳しい説明は、また別の機会にしようと思います。
既に知っている方は、是非このプレハブを積極的に活用して、時間を短縮し、効率よく制作を進めてみてください。

Update関数は毎フレームの更新のタイミングで呼ばれる関数です。
当然ですが、ゲーム内に登場していないオブジェクトはこの更新の関数も呼び出されません。

このUpdate関数には、オブジェクトを動かしたり内部でカウントをとったり等、毎フレーム行いたい処理をよく入れます。

ケンタ

Start関数は、オブジェクトのデータを初期化するときに使う関数。
Update関数は、オブジェクトを毎フレーム動かすときに使う関数だな。

ソウバ

実は、Start関数やUpdate関数のような、Unityに備わっている関数は他にもあります。

例えば、Awake関数というものがあります。
Awake関数は、殆どStart関数と同じような働きがあります。
Awake関数の特徴としては、Start関数よりも先に呼ばれるというところです。

本来ならもう少し細かい仕様を語るべきかもしれません。
しかし、この辺りはゲーム作りに慣れていないと難しいと思います。
なので、取り敢えず今はAwake関数はStart関数より先に呼ばれる初期化関数、と覚えておけばいいと思います。

このAwake関数のように、必須という程ではないけど、使うときは使うというような関数も存在します。
そのような関数は、あらかじめスクリプトには書かれていないので、必要なら自分で調べる必要があります。
せいさくしゃのゲームでも使う機会があれば、その時にまた説明していこうと思います。

今回のまとめ

今回は、遂にUnityでのスクリプトについて触れました。
端的にまとめると、以下の通りです。

今回のまとめ
  • スクリプトを書くためには、スクリプトファイルを作る必要があります。
  • Unityでスクリプトファイルを作ると、始めから書かれているコードがあります
  • その中でも重要な関数があり、Start関数は初期化の関数、Update関数は更新の関数です。

以上がUnityのスクリプトでの基本的な知識になるので、まずはこれに慣れましょう。

今回は、実装した内容を全て解説しきれませんでした。
しかし、あまりにも長くなると、読み手としても疲れてしまうかと思います。
なので、解説の続きは次回以降に回そうと思います。

また、今回の様に進捗に対して解説を細かく区切る事もあると思います。
本当に進行がゆっくりになってはいますが、出来るだけ丁寧な解説を心掛けているつもりです。
気長にお付き合いいただけたら嬉しいです。

それでは、今回はここまでにしたいと思います。
お疲れ様でした。

COMMENT

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

CAPTCHA