君がゲームを作る!Unityゲーム開発入門
第35回 画面を横スクロールする

舞台(ステージ)をカメラで撮影しているイメージだよ

みなさん、こんにちは!

これを書いている頃は5月も中ごろを過ぎ、だんだんと夏らしくなってきました。

基本ヒッキーな生活を送っている僕はたまに人に会うと慣れなくてそれだけで汗かきまくったりするのですが、 夏は「暑いですね」と一言いえばみんな納得してくれるので安心です!

さて今日は「君がゲームを作る!Unityゲーム開発入門」の第35回目です。

おさらい

前回 まででは数回にわたって、忍者を操作したときのアニメーション切り替えを作ってきましたね。

いまは画面の端まで操作すると、そのまま忍者が画面の外へ飛び出していってしまいます。

今回は忍者と一緒に画面が横スクロールするように変えていきたいと思います!

カメラ

Unityにはカメラというものが存在します。

写真を撮ったり、動画を撮ったりするあのカメラですね。 ゲームのプレーヤーはこのカメラから見た視点でゲームを遊ぶことになります。

では、そのカメラの動きを確認してみましょう!
ヒエラルキーウィンドウで「Main Camera」を選択してください。

シーンウィンドウの中央当たりにビデオカメラのようなマークと、 少し離れた周りに白い枠線が表示されましたね。

この白い枠線がこのカメラで見える範囲です。
プレーヤーはカメラを通した映像を見ながらゲームをプレイすることになるので、 言い換えるとこの白い枠線はゲームのプレーヤーが見ている画面の枠とも言えます。

カメラの位置を変えてみる

試しにカメラの位置を変えてみましょう。
インスペクターウィンドウの「Position」の「X」を「4」に変更してみます。

数字の入力と同時に白い枠線が右へずれましたね。

これでどのように変わったか確認してみましょう。
▶ボタンを押して、プレイモードに入ります。

ゲームのプレイ画面も同じように右にずれました!

やはり「Main Camera」から見る視点でゲームをプレイしているということですね。 カメラの動きが確認することができたので、Positionの値を元に戻しておきましょう。

横スクロールのしかた

さていま試してみたように、カメラの「Position」値を変更することで、 プレイ画面で見える場所を変えることができましたね。

ということは、忍者の動きに合わせてこの値を変えてあげれば 横スクロールもできそうですね。

カメラ用のスクリプトファイルを作成する

では、早速そのようにプログラミングしていきましょう!

まずはプログラミングをするスクリプトファイルを準備します。

プロジェクトウィンドウで「Scripts」フォルダを選択し、 「Assets」メニューの「Create」から「C# Script」をクリックします。

作成されたスクリプトファイルの名前をわかりやすいものに変えておきましょう。
ここでは「CameraControl」としてみました。

プログラミングする

次に作成したスクリプトファイルにプログラミングしていきます。

プロジェクトウィンドウで「Scripts」フォルダを選択し、 「CameraControl」ファイルを選択後インスペクターウィンドウで「Open」をクリックし、 スクリプトファイルを編集できる状態にします。

下記のようにプログラミングしてください。

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

    public class CameraControl : MonoBehaviour
    {
        // 忍者のゲームオブジェクトを保持
        public GameObject player;
        // 忍者とカメラの位置関係を保持
        private Vector3 offset;


        // Start is called before the first frame update
        void Start()
        {
            // ゲームスタート時での忍者とカメラの位置関係を記憶
            offset = transform.position - player.transform.position;
        }

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

        void LateUpdate()
        {
            // 忍者の現在位置から新しいカメラの位置を作成
            Vector3 vector = player.transform.position + offset;
            // 縦方向は固定
            vector.y = transform.position.y;
            // カメラの位置を移動
            transform.position = vector;
        }
    }
    

LateUpdateメソッド

すべてのゲームオブジェクトのUpdateメソッドが呼び出された後に実行される関数です。
ここに処理を書くことで、確実に忍者の移動処理が終わった後に実行することができるのですね。

playerメンバ変数

忍者のゲームオブジェクトを保持する領域です。
ここの値の設定は次の工程で行います。

offsetメンバ変数

忍者の位置から見て、縦・横にどのくらい離れた位置にカメラを置くかという値を保持するための変数です。
Startメソッドで現在の離れ具体を取得し、それをそのまま保持していますね。

カメラにスクリプトを紐づける

続いてカメラにスクリプトを紐づけます。
ヒエラルキーウィンドウで「Main Camera」を選択し、インスペクターウィンドウの「Add Component」をクリックします。

「Scripts」をクリックします。

さきほど作成したスクリプトファイルの名前(ここでは「Camera Control」)をクリックします。

「Camera Control」スクリプトがコンポーネントとして追加されました!

playerメンバ変数に忍者を設定する

先ほどスクリプトファイルで「忍者のゲームオブジェクトを保持する領域です。」とご説明した 「playerメンバ変数」に忍者のゲームオブジェクトを設定します。

ヒエラルキーウィンドウの「Idle__000」をインスペクターウィンドウの「Player」の欄にドラッグ&ドロップします。

playerメンバ変数に忍者のゲームオブジェクトを設定できました!

テストプレイで動作確認をする

それでは、テストプレイをして変化を確認してみましょう!

▶ボタンを押して、プレイモードに入ります。

キーボードで忍者を操作をすると、、

忍者の移動に合わせて画面がスクロールされました!

今回はここまでです。

次回は、忍者がステージから落ちたときの処理を作っていきたいと思います。

次回へ続く。

>> 続きの記事
【君がゲームを作る!Unityゲーム開発入門】第36回 ステージから落ちたらスタート時点に戻る