音無サノトの空想録

ゆるい漫画を描いています

【ゲーム制作】Unityを利用した横スクロールゲーム開発 01 カメラの視点移動

どうも音無サノトです。 

ちょっと工夫した簡単な横スクロールゲームのプロトタイプを今回から開発してみようかなと思います。

 

今日の成果

  • コンセプトは「カメラ切り替えをして進むゲーム」
  • キャラとカメラの動作を実装

 

作業ログ 

まずイメージとしては「横スクロールのゲームなんだけど、3D視点を利用してカメラの位置を変更することで進むことができるゲーム」というコンセプトで進めて行こうと思います。

 

そこで、ゲームの核となるキャラクターの動きとカメラの視点移動から作成。

 

Unityで新規プロジェクトを作成して、使えそうなアセットをインポートします。

f:id:otonasisanoto:20200830134343p:plain

今回はこのアセットを使用。

余裕があればオリジナルのキャラクターを作成したいところですが、それは出来そうならで。。。

 

テストでキャラクターを動かした様子が以下の通りです。

 

もうすでに動作などは実装されているから、ただゲームシーンにキャラクターを置いただけ。

こんな簡単にできるのだから素晴らしいですな。

 

次にカメラの視点移動を実装していきます。

前回のボール転がしゲームのカメラ移動を流用。

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

public class CameraController : MonoBehaviour
{
    
    public GameObject player;
    private Vector3 offset;

    void Start()
    {
        // メインカメラとPlayerの相対距離を算出
        offset = transform.position - player.transform.position;
    }

    void Update()
    {
        transform.position = player.transform.position + offset;
    }
}

 

これでキャラクターの動きに合わせてカメラも移動します。

 

ただ、このままだとキャラクターがそのまま落ちています。

どこかで曲がらないといけないのですが壁が邪魔で見えない。

そのためカメラの視点を切り替える必要があるということです。

それを実装していきます。

 

スクリプトを以下のように変更。

Qキーが押された場合、カメラ視点が切り替わるようになっています。

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

public class CameraController : MonoBehaviour
{
    
    public GameObject player;
    private Vector3 offset;

    Animator anim;

    bool isCameraPotionDefault = true;

    void Start()
    {
        // メインカメラとPlayerの相対距離を算出
        offset = transform.position - player.transform.position;
    }

    void Update()
    {
        transform.position = player.transform.position + offset;

        // Qキーでカメラ視点の切り替え
        if (Input.GetKeyUp(KeyCode.Q)) {
            isCameraPotionDefault = !isCameraPotionDefault;

            if(isCameraPotionDefault){
                offset.x = offset.x + 2.5f;
                offset.z = offset.z + 2.5f;
                transform.eulerAngles = new Vector3(18.5f,-90f,0);
            } else{
                offset.x = offset.x - 2.5f;
                offset.z = offset.z - 2.5f;
                transform.eulerAngles = new Vector3(18.5f,0,0);
            }

        }
    }
}

 

最初はアニメーションでカメラ切り替えをしようと思ったのですが、カメラの位置が変動するため、思うように実装出来ませんでした。

このコードでも動作はできるのですが、自分のイメージではもっと滑らかに動いていく感じだったので改良が必要かもしれないです。

 

まあ、まずは動くものを作るのが大事。

次回からはステージ作りをやって行こうと思います。