解説

プログラムによるコンポーネントの自作

前回はコンポーネントについて説明しました。Unityではコンポーネントを組み合わせることで、ゲームオブジェクトの挙動を設定してゲームを制作していくことになります。この記事では、Unityのプログラムの役割について説明し、簡単なプログラムを書くことを通してコンポーネントが作成できることを示します。

Unityプログラミング講座一覧はこちら

Unityプログラミング講座
ゲームエンジンUnityを使ってゲーム制作を始めようと思っている人へ向けた解説記事です。初心者がUnityをインストールするところから始めてゲームを制作するのに必要な知識をできる限りステップバイステップでまとめるつもりです。

ここがポイント

  • Unityではプログラミングによりコンポーネントを作成できる。
  • 既存のコンポーネントと自作コンポーネントを組み合わせることで、少ないプログラムコードでゲームを制作することが可能。

プログラムによりコンポーネントは自作できる

UnityではRendererColliderといった有用なコンポーネントがすでに用意されています。これらを使うことで、見えるけど触れないゲームオブジェクトなどが作成できました。しかし、これらの用意されたコンポーネントだけでは不十分であることにあなたは気づいているかもしれません。

例えば、アクションゲームのプレイヤーキャラクターを制作したい場合にはどうすればいいでしょうか。確かに、ColliderRigidbodyを使えば、敵キャラクターやブロックにぶつかったり、重力で下に落ちるといった振る舞いは実現できます。しかし、ボタンを入力して動かなければ遊ぶことができません。ゲームである以上、ボタン入力に反応する機能は必須でしょう。

問題はゲームによってプレイヤーの操作に違いがあることです。移動しかできないゲームもあれば、ジャンプしたり、ものを持ったり、攻撃したりなど様々なアクションができるゲームもあるでしょう。そういった多種多様なアクションを既存のコンポーネントだけで実現するのは不可能です。

Unityはこの問題を解決するために、プログラムを書くことでコンポーネントを自由に作れるような機能を提供しています。この仕組みは非常に強力で魅力的です。なぜなら、当たり判定や画像の表示といった機能は既存のコンポーネントを利用し、ゲームごとに固有の機能だけを自作コンポーネントで実現すればゲームが完成するからです。つまり、自分で1から書くのに比べて、はるかに少ないプログラムコード量でゲームが制作できるのです。

コンポーネントを実際に作ってみよう

新しく作成すると「何もしないコンポーネント」になる

新しいスクリプトを作成する。

それでは、プログラミングによってコンポーネントを作成してみましょう。

プログラムを作る前に、自作コンポーネントをアタッチするためのゲームオブジェクトSphereを作成します。(Sphereである必要はなく、CubeCapsuleでも構いません。)

プログラムはプロジェクトビューで作成します。(プログラムファイルはアセットの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のエディタ設定を行う。

コードの入力補完が効かない場合は、Unityとプログラムを編集するエディタが正しく関連づけられていない可能性があります。直す手順は次の通りです。

  1. 画面上部にあるEditからPreferences…を選択します。
  2. 左側にあるメニューからExternal Toolsを選択します。
  3. External Script Editorを使用するエディタに変更します。

エディタとか言われてもよくわからない人にはVisual Studioをお勧めします。メニューに表示されない場合にはVisual Studioがインストールされていないかもしれません。(Unity Hubを使ってVisual Studioをインストールする手順はこちら

ボタンを押すとゲームオブジェクトが動くコンポーネント

プログラムにif分を追加する。

Transformコンポーネントにアクセスして位置を変えることは行いましたが、これではゲームらしくありません。やはりゲームですから、プレイヤーの入力に反応してゲームオブジェクトが動くべきでしょう。

そこで、上述のプログラムにもう少し加えます。Updateの内容を以下のように書いてください。

...
    void Update()
    {
        if (Input.GetKey(KeyCode.Mouse0))
        {
            transform.position += new Vector3(0.01f, 0f, 0f);
        }
    }
...

これで左クリックを押している間だけゲームオブジェクトが動くようになります。

まとめ

この記事では、プログラムを書くことによってコンポーネントが自作できることを説明しました。自作コンポーネントを作る際には、他のコンポーネントにアクセスしてそれらを利用することで、1から書くよりもはるかに短いプログラムで独自の機能が実現できます。

今回は、マウスのボタンに反応して動くような短いプログラムを書きましたが、より複雑なものになっても基本的な考え方は同じです。ただし、コンポーネントを作成するためにはどうしてもプログラミングの知識が必要になります。そのため、次回以降はプログラミングの基礎について説明します。

Unityプログラミング講座一覧はこちら

Unityプログラミング講座
ゲームエンジンUnityを使ってゲーム制作を始めようと思っている人へ向けた解説記事です。初心者がUnityをインストールするところから始めてゲームを制作するのに必要な知識をできる限りステップバイステップでまとめるつもりです。
タイトルとURLをコピーしました