プロのゲームクリエイターも使っている、2D/3Dゲーム開発エンジン「Unity(ユニティ)」。3D迷路を探検するゲームをつくりながら、Unityでのゲームのつくり方を紹介しているよ。
第3回では、フィールドになる3D迷路をつくった。今回はプレイヤーをつくっていくぞ。プレイヤーを動かすためのプログラムにもチャレンジだ。
1 プレイヤーをつくる
前回と同じように、Unity Hub(ユニティ ハブ)を起動して、「プロジェクト」にある「Maze Game」をクリックしよう。ちゃんと保存をしていたら、3D迷路が完成している状態でUnityが起動するよ。ここからプレイヤーを追加していこう。
① 新しく「Cube
」をつくってプレイヤーにする。つくり方は、Hierarchy
ウィンドウで「Create
」をクリックして、表示された「3D Object
」から「Cube」を選べばできたよね。「Cube」の名前は「Player
」に変えよう。
② プレイヤーに「Rigidbody
」コンポーネントを設定する。「Rigidbody」は物理的な性質のことで、これを設定することで、物理法則に沿って動けるようになるよ。たとえば、重力をうけたりするんだ。
Hierarchyウィンドウで「Player」を選択した状態で、Inspector
ウィンドウの一番下にある「Add
Compnent
」をクリックする。表示された一覧から探してもいいけど、上にある入力ボックスに「Rigidbody」と入力するすぐに探せるよ。「Rigidbody」が表示されたら選ぼう。
③ PlayerのInspectorウィンドウに「Rigidbody」が表示されていることを確認しよう。
④ UnityのPlay
ボタンをクリックしてみよう。プレイヤーが落ちていって、迷路の床で止まるかな?
「Cube」じゃなくて、自分でつくった3Dモデルを使った場合、床をすり抜けてしまうかもしれない。
その場合は、Inspectorウィンドウの「Box
Collider
」にチェックを入れよう。
2 プログラムをつくるための準備をする
次に、プレイヤーを動かす機能(Component
)を自分で新しいプログラム(Script
)を書いてつくっていくよ! まずはプログラムをつくるための準備をするよ。
① Hierarchyウィンドウで「Player」を選択した状態で、Inspectorウィンドウの「Add Component」ボタンをクリック。表示されたメニューから「New Script」を選ぶ。
② 名前を「PlayerMove」にして、「Create
and
Add
」 をクリックする。すると、Projectウィンドウの「Assets」の中に、「PlayerMove」というファイルができる。
③ Inspectorウィンドウに、「PlayerMove(Script)」ができている。右端にある歯車のアイコンをクリックすると、メニューが表示されるので「Edit
Script
」選択すると、「Visual
Studio
」(Windowsの場合)が起動する。アカウントの登録のウィンドウが出るけど「後で行う」をクリックすれば起動するよ。
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の保存」を選んで、プログラムを保存しよう。
③ プログラムを保存したら、Unityの画面に戻ってPlayボタンをクリックしてみよう! プレイヤーは青い軸(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” | キーボードの上矢印のキーのこと。下キーは”down”、左キーは”left”、右キーは”right”で表すことができる |
② プログラムが完成したら、保存をしてUnityに戻ろう。UnityのPlayボタンを押して、カーソルキーの「上」キーを押してみよう。プレイヤーが青軸(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ワンダー)