Mapboxを使って超絶簡単にオープンワールドゲームを作る方法

2022/05/16に公開

UnityとMapboxの連携

前回書いた記事を参照下さい

https://zenn.dev/soh92/articles/ef27f429966fbd

ワールドを作る

ヒエラルキーで空のオブジェクトを作成します。
作成したオブジェクトにコンポーネントととしてAbstract Mapを追加します。

以上でワールドの作成は完了です。
Enable Previewを押して確認してみましょう。
スクリーンショット 2022-04-23 16.52.30.png

## Mapの設定
Locationから地図の位置座標を決められます。
Searchからはテキストで検索できます(Tokyoとか)

FEATURESでBuildingをAdd Featureすると地図上にビルの3Dモデルが表示されます。

プレイヤーを作る

次にプレイヤーオブジェクトを作っていきます。

ヒエラルキーで3Dオブジェクト>キューブを作成します。
とりあえずY位置を1にしておきましょう。

作成したキューブにカメラを追加します。
カメラの位置はXYZ全部0で良いと思います。

すると一人称視点で地図の世界に入り込めます。
スクリーンショット 2022-04-23 16.54.08.png

プレイヤーを操作する

Assetsフォルダ(なかったら作る)にC#スクリプトを作成して、プレイヤーを操作するスクリプトを書いていきます。

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

public class PlayerController : MonoBehaviour
{
    public float speed = 3.0f;

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

    // Update is called once per frame
    void Update()
    {
        if (Input.GetKey("up")) {
            transform.position += transform.forward * speed * Time.deltaTime;
        }
        if (Input.GetKey("down")) {
            transform.position -= transform.forward * speed * Time.deltaTime;
        }
        if (Input.GetKey("right")) {
            transform.Rotate(0f, speed * Time.deltaTime * 10f, 0f);
        }
        if (Input.GetKey("left")) {
            transform.Rotate(0f, -speed * Time.deltaTime * 10f, 0f);
        }
        if (Input.GetKey(KeyCode.X)) {
            transform.Rotate(speed * Time.deltaTime * 50f, 0f, 0f);
        }
        if (Input.GetKey(KeyCode.Z)) {
            transform.Rotate(0f, 0f, speed * Time.deltaTime * 50f);
        }
    }
}

スクリプトを作成したら、プレイヤーオブジェクトにアタッチ(ドラッグ&ドロップ)します。

実行して十字キーで操作しましょう。
ダウンロード (1).gif

ワールドの表示をプレイヤーを基準にする

最初にワールドをすべて描画すると重すぎるので、ある程度範囲を限定して表示します。
プレイヤーが移動したら、都度続きのワールドが表示されるようにして、オープンワールドとしています。

MapのGENERALにあるExtent OptionをRange Around Transformにします。
Target Transformをプレイヤーオブジェクトに設定すれば完了です。

スクリーンショット 2022-04-23 17.17.34.png

これでオープンワールドの完成です。

Discussion