前回はコンポーネントについて説明しました。Unityではコンポーネントを組み合わせることで、ゲームオブジェクトの挙動を設定してゲームを制作していくことになります。この記事では、Unityのプログラムの役割について説明し、簡単なプログラムを書くことを通してコンポーネントが作成できることを示します。
Unityプログラミング講座一覧はこちら
プログラムによりコンポーネントは自作できる
UnityではRenderer
やCollider
といった有用なコンポーネントがすでに用意されています。これらを使うことで、見えるけど触れないゲームオブジェクトなどが作成できました。しかし、これらの用意されたコンポーネントだけでは不十分であることにあなたは気づいているかもしれません。
例えば、アクションゲームのプレイヤーキャラクターを制作したい場合にはどうすればいいでしょうか。確かに、Collider
やRigidbody
を使えば、敵キャラクターやブロックにぶつかったり、重力で下に落ちるといった振る舞いは実現できます。しかし、ボタンを入力して動かなければ遊ぶことができません。ゲームである以上、ボタン入力に反応する機能は必須でしょう。
問題はゲームによってプレイヤーの操作に違いがあることです。移動しかできないゲームもあれば、ジャンプしたり、ものを持ったり、攻撃したりなど様々なアクションができるゲームもあるでしょう。そういった多種多様なアクションを既存のコンポーネントだけで実現するのは不可能です。
Unityはこの問題を解決するために、プログラムを書くことでコンポーネントを自由に作れるような機能を提供しています。この仕組みは非常に強力で魅力的です。なぜなら、当たり判定や画像の表示といった機能は既存のコンポーネントを利用し、ゲームごとに固有の機能だけを自作コンポーネントで実現すればゲームが完成するからです。つまり、自分で1から書くのに比べて、はるかに少ないプログラムコード量でゲームが制作できるのです。
コンポーネントを実際に作ってみよう
新しく作成すると「何もしないコンポーネント」になる
それでは、プログラミングによってコンポーネントを作成してみましょう。
プログラムを作る前に、自作コンポーネントをアタッチするためのゲームオブジェクトSphere
を作成します。(Sphere
である必要はなく、Cube
やCapsule
でも構いません。)
プログラムはプロジェクトビューで作成します。(プログラムファイルはアセットの1つです。)右クリックメニューからCreate → C# Script
を選ぶとファイルが作成されます。これだけで自作コンポーネントができます。Sphere
に新しくできたファイル(スクリプト)NewBehaviourScript
をドラッグ&ドロップしてみてください。Sphere
を選択するとインスペクターにNew Behaviour Script
という名前のコンポーネントが表示されていることが確認できると思います。
自作コンポーネントを新しく作成しただけで何もしないコンポーネントが出来上がります。つまり、この状態ではゲームをテストプレイしても何も起こりません。
ゲームオブジェクトの位置を変えるコンポーネント
コンポーネントは別のコンポーネントにアクセスしてデータを変えることができます。ためしに1行プログラムを書いてTransform
コンポーネントの位置Position
の値を変更してみましょう。プログラミングについては別の記事で解説します。ここでは、1行書くだけでゲームオブジェクトを動かせることを実感してください。
スクリプトをダブルクリックしてファイルを開いてください。新規作成したスクリプトでも既にコードが書かれています。その中のUpdate
と書かれている箇所の波かっこ{}の内部に次の行を書き加えましょう。(すべて半角英数字で記入してください。)
transform.position += new Vector3(0.01f, 0f, 0f);
コード全体としては以下のようになります。
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class NewBehaviourScript : MonoBehaviour
{
// Start is called before the first frame update
void Start()
{
}
// Update is called once per frame
void Update()
{
transform.position += new Vector3(0.01f, 0f, 0f);
}
}
transform.position
を用いることでゲームオブジェクトについているTransform
コンポーネントのPosition
の値にアクセスすることができます。このプログラムはこのPosition
の値を変更することで、ゲームオブジェクトを動かしています。
コードの入力候補が現れないときは?
プログラムを書く時には入力補完機能を用いると便利です。上に載せたgif画像では最初の数文字を打った後に入力候補が表示されています。その中から使うものを見つけたらtabキーを押すことで自動で残りの部分を記入してくれます。
コードの入力補完が効かない場合は、Unityとプログラムを編集するエディタが正しく関連づけられていない可能性があります。直す手順は次の通りです。
- 画面上部にあるEditからPreferences…を選択します。
- 左側にあるメニューからExternal Toolsを選択します。
- External Script Editorを使用するエディタに変更します。
エディタとか言われてもよくわからない人にはVisual Studioをお勧めします。メニューに表示されない場合にはVisual Studioがインストールされていないかもしれません。(Unity Hubを使ってVisual Studioをインストールする手順はこちら)
ボタンを押すとゲームオブジェクトが動くコンポーネント
Transform
コンポーネントにアクセスして位置を変えることは行いましたが、これではゲームらしくありません。やはりゲームですから、プレイヤーの入力に反応してゲームオブジェクトが動くべきでしょう。
そこで、上述のプログラムにもう少し加えます。Update
の内容を以下のように書いてください。
...
void Update()
{
if (Input.GetKey(KeyCode.Mouse0))
{
transform.position += new Vector3(0.01f, 0f, 0f);
}
}
...
これで左クリックを押している間だけゲームオブジェクトが動くようになります。
まとめ
この記事では、プログラムを書くことによってコンポーネントが自作できることを説明しました。自作コンポーネントを作る際には、他のコンポーネントにアクセスしてそれらを利用することで、1から書くよりもはるかに短いプログラムで独自の機能が実現できます。
今回は、マウスのボタンに反応して動くような短いプログラムを書きましたが、より複雑なものになっても基本的な考え方は同じです。ただし、コンポーネントを作成するためにはどうしてもプログラミングの知識が必要になります。そのため、次回以降はプログラミングの基礎について説明します。
Unityプログラミング講座一覧はこちら