第4回 プレイヤーをつくろう

 プロのゲームクリエイターも使っている、2D/3Dゲーム開発エンジン「Unity(ユニティ)」。3D迷路を探検するゲームをつくりながら、Unityでのゲームのつくり方を紹介しているよ。

 第3回では、フィールドになる3D迷路をつくった。今回はプレイヤーをつくっていくぞ。プレイヤーを動かすためのプログラムにもチャレンジだ。

1 プレイヤーをつくる

 前回と同じように、Unity Hub(ユニティ ハブ)を起動して、「プロジェクト」にある「Maze Game」をクリックしよう。ちゃんと保存をしていたら、3D迷路が完成している状態でUnityが起動するよ。ここからプレイヤーを追加していこう。

① 新しく「Cube
キューブ
」をつくってプレイヤーにする。つくり方は、Hierarchy
ヒエラルキー
ウィンドウで「Create
クリエイト
」をクリックして、表示された「3D Object
オブジェクト
」から「Cube」を選べばできたよね。「Cube」の名前は「Player
プレイヤー
」に変えよう。

新しく「Cube」オブジェクトをつくって、名前を「Player」に変える

② プレイヤーに「Rigidbody
リジッドボディ
」コンポーネントを設定する。「Rigidbody」は物理的な性質のことで、これを設定することで、物理法則に沿って動けるようになるよ。たとえば、重力をうけたりするんだ。

 Hierarchyウィンドウで「Player」を選択した状態で、Inspector
インスペクター
ウィンドウの一番下にある「Add
アッド
Compnent
コンポーネント
」をクリックする。表示された一覧から探してもいいけど、上にある入力ボックスに「Rigidbody」と入力するすぐに探せるよ。「Rigidbody」が表示されたら選ぼう。

「Player」に「Rigidbody」コンポーネントを設定する

③ PlayerのInspectorウィンドウに「Rigidbody」が表示されていることを確認しよう。

PlayerのInspectorウィンドウで「Rigidbody」が表示されていることを確認

④ UnityのPlay
プレイ
ボタンをクリックしてみよう。プレイヤーが落ちていって、迷路の床で止まるかな?

Unityの実行ボタンをクリックして、プレイヤーの動きを確認

 「Cube」じゃなくて、自分でつくった3Dモデルを使った場合、床をすり抜けてしまうかもしれない。
 その場合は、Inspectorウィンドウの「Box
ボックス
Collider
コライダー
」にチェックを入れよう。

Inspectorウィンドウの「Box Collider」にチェックを入れる

2 プログラムをつくるための準備をする

 次に、プレイヤーを動かす機能(Component
コンポーネント
)を自分で新しいプログラム(Script
スクリプト
)を書いてつくっていくよ! まずはプログラムをつくるための準備をするよ。

① Hierarchyウィンドウで「Player」を選択した状態で、Inspectorウィンドウの「Add Component」ボタンをクリック。表示されたメニューから「New Script」を選ぶ。

Inspectorウィンドウの「Add Component」ボタンをクリック。表示されたメニューから「New Script」を選ぶ。

② 名前を「PlayerMove」にして、「Create
クリエイト
and
アンド
Add
アッド
」 をクリックする。すると、Projectウィンドウの「Assets」の中に、「PlayerMove」というファイルができる。

「PlayerMove」にして、「Create and Add」 をクリック
Projectウィンドウの「Assets」の中に、「PlayerMove」というファイルができる。

③ Inspectorウィンドウに、「PlayerMove(Script)」ができている。右端にある歯車のアイコンをクリックすると、メニューが表示されるので「Edit
エディット
Script
スクリプト
」選択すると、「Visual
ビジュアル
Studio
スタジオ
」(Windowsの場合)が起動する。アカウントの登録のウィンドウが出るけど「後で行う」をクリックすれば起動するよ。

「PlayerMove(Script)」ができている。右端にある歯車のアイコンをクリック
Microsoft Visual Studioが起動する

3 プレイヤーのプログラムをつくる

 Visual Studioが起動したかな。プログラミングは「C#(シーシャープ)」というプログラミング言語でするよ。C#についてはここでは詳しく説明しないので、まずは説明通りにやってみてほしい。

 起動したVisual Studioの画面を見ると、下のようなプログラムが書いてある。ここでは2つの意味だけ確認するよ。

-------------------------------------------
PlayerMove.cs
-------------------------------------------
using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class PlayerMove : MonoBehaviour {

    // Start is called before the first frame update
    void Start () {

    }

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

    }
}
-------------------------------------------

◼︎探してみようーStart関数

 プログラムの8行目に次のようなコードがあるね。

-------------------------------------------
    void Start () {

    }
-------------------------------------------

 これはStart
スタート
関数といって、この{}の中に書いた処理が、「PlayerMove.cs」のプログラムが始まったとき、最初に一度だけ実行されるよ。

◼︎探してみようーUpdate関数

 プログラムの14行目に次のようなコードがある。

-------------------------------------------
    void Update () {

    }
-------------------------------------------

 これはUpdate
アップデート
関数といって、この{ }の中に書いた処理が「PlayerMove.cs」のプログラムが始まったら、ずっとくり返されるよ。

◼︎プレイヤーを動かすプログラムを書いてみよう

 今回つくるゲームでは、プレイヤーは『「PlayerMove.cs」のプログラムが始まったらずっと動く』にする。そのために、Update関数の{}の中に、プレイヤーをZ方向へ動かすためのプログラムを書く。

① Visual Studioで、「void update()」の下にあるプログラムを入力する。

-------------------------------------------
    void Update () 
  {
        transform.position += transform.forward * 0.1f;

    }
-------------------------------------------

 ここで使っているコードは、下の表のような意味があるよ。

コード 意味
transform.position オブジェクトの位置
+= 〜 〜ずつ足す
transform.forward オブジェクトが向いてる方向(オブジェクトのz方向)に1動く
* かけ算の「×」のこと。「* 0.1f」は「× 0.1」と同じ。ここでは、動きの大きさにに0.1をかけ算し て調整している

② プログラムができたら、「ファイル」メニューから「Assets¥PlayerMove.csの保存」を選んで、プログラムを保存しよう。

「ファイル」メニューから「Assets¥PlayerMove.csの保存」を選んで、プログラムを保存

③ プログラムを保存したら、Unityの画面に戻ってPlayボタンをクリックしてみよう! プレイヤーは青い軸(Z軸)の方向に、自動的に動いたかな?

Unityの画面に戻って実行ボタンをクリックしてみよう! プレイヤーは青い軸(Z軸)の方向に動く

◼︎カーソルキー(上)を押したら前に進む

  次に、プレイヤーをパソコンのカーソルキーで動かせるようにするよ。まずはカーソルキーの「上」キーを押したら、プレイヤーが前(SceneビューではZ軸の方向)に進むようにする。

パソコンのカーソルキーの「上」キー

① Visual Studioに戻って、「カーソルキーの上を押したら」 という意味のコードを追加する。下のようにプログラムをつくってね。今回追加したのは、「  if (Input.GetKey (“up”)) 」というコードだ。リストの下にある、Visual Studioの画面で、ピンク色の囲まれた部分がそうだよ。

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

public class PlayerMove : MonoBehaviour
 {
    void Start ()
 {

    }

    void Update ()
 {
        if (Input.GetKey ("up")) 
   {
            transform.position += transform.forward * 0.1f;
        }
    }
}
-------------------------------------------
「  if (Input.GetKey ("up"))  」というコードを追加

 今回追加したコードは、下の表のような意味があるよ。

コード 意味
if( △△△ ){ ◎◎◎ } もし△△△なら◎◎◎する
Input.GetKey(“△△”) キーボードの△△キーが入力された
“up” キーボードの上矢印のキーのこと。下キーは”down”、左キーは”left”、右キーは”right”で表すことができる

② プログラムが完成したら、保存をしてUnityに戻ろう。UnityのPlayボタンを押して、カーソルキーの「上」キーを押してみよう。プレイヤーが青軸(Z軸)の方向に動いたかな?

Unityの実行ボタンを押して、カーソルキーの「上」のキーを押すと、プレイヤーがZ軸方向に動く

◼︎カーソルキー(右)を押したらプレイヤーが右回転する

 次に、カーソルキーの「右」キーを押したら、プレイヤーが右回転するようにしよう。

カーソルキーの「右」キー

① Visual Studioの画面で、「右キーをおしたらプレイヤーの向きを右回転する」 という意味のコードを追加する。下のようにプログラムをつくってね。今回追加したのは、 リストの下にある、Visual Studioの画面で、ピンク色の囲まれた部分だよ。

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

public class PlayerMove : MonoBehaviour {

    void Start () {

    }

    void Update () {
        if (Input.GetKey ("up")) {
            transform.position += transform.forward * 0.1f;
        }
        if (Input.GetKey ("right")) 
   {
            transform.Rotate(0,5,0);
        }
    }
}
-------------------------------------------

 今回追加したコードは、下の表のような意味があるよ。

コード 意味
if(Input.GetKey(“right”)){} もしカーソルキーの右が押されたら
transform.Rotate(0,5,0) オブジェクトが、Y軸を中心に5度回る

② プログラムが完成したら、保存をしてUnityに戻ろう。UnityのPlayボタンを押して、カーソルキーの右を押してみよう。プレイヤーが、緑の軸(Y軸)を中心にして5度回ったかな。ちなみに、キーを押し続けると、ずっと回り続けるよ。

◼︎ミッション:カーソルキーの左を押したら、プレイヤーが左回転するようにしよう!

 これまでの説明を参考にして、カーソルキーの左を押したら、プレイヤーが左回転するプログラムをつくってみよう。下のサンプルプログラムを参考に、Visual Studioの画面でプログラムを完成させよう。どのコードが追加されたか、自分で探してみてね!

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

public class Player : MonoBehaviour
 {
    // Use this for initialization
    void Start () 
{

    }

    // Update is called once per frame
    void Update () {
        if (Input.GetKey ("up")) {
            transform.position += transform.forward * 0.1f;
        }
        if (Input.GetKey ("right"))
 {
            transform.Rotate(0,5,0);
        }
        if (Input.GetKey ("left"))
 {
            transform.Rotate(0,-5,0);
        }
    }
}
-------------------------------------------

 プログラムが完成したら、保存をしてUnityに戻ろう。UnityのPlayボタンを押して、カーソルキーの左を押してみよう。プレイヤーはどんな動きをしたか確認してみよう!

 今回は、プレイヤーをつくって動かすところまで完成させたね。でも今のままだと、斜め上からしかプレイヤーを見ることができない。そこで次回は、プレイヤーを追いかけられるようにするよ。お楽しみに!

(記事協力:LITALICOワンダー)

最新号好評発売中!

子供の科学 2020年 12月号

CTR IMG