Unityで無限ランを作ってみよう!【part1.地面を作る編】

プログラミング

(この記事は2023年8月1日が最終更新日です。)

この記事の作成はKazuが行っています。
本業ではVRエンジニアとして働きつつ副業でWebエンジニア・デザインを行っています。

※Unity 2019.4.19f1 を使用して作成しています。

本記事は初心者向けにUnityでゲームを作ることができるようになることを目的として無限走のようなゲームを作成していきます。

本記事ではPart1ということでステージの地面を作成していきます。ステップバイステップで解説していくので初心者でも真似することで作成ができるようになっています。

ざっくりと流れを解説

  1. 地面となるオブジェクトを作成
  2. 地面を無限に作るScriptを作成
  3. 各設定をして完了!!

たったこれだけです。作業は大体30分で完了します。※ScriptはコピペでOK!

地面となるオブジェクトを作成

まずは地面となるオブジェくを作っていきます。

Objectの作成

Hierarchy内で右クリック→3d Object → Cube で地面となるオブジェクトを作成します。

Objectの作成確認

オブジェクトが作成されました。これを分かりやすいように「Plane」などに名前を変更しておきましょう。

Objectの名称変更

オブジェクトの名称変更はInspectorで変更するかHierarchy内の名称をクリックすることで編集可能になります。

オブジェクトを地面の形に修正してあげます。今回は分かりやすいようにMaterialも適用してあげます。

形の変更とMaterial適用

1つ完成したら Ctrl + D で複製し10ほど地面を作成します。名称はそれぞれ変更してください。

Objectの複製

私の場合は以下のようなオブジェクト名にしています。

  • Plane0
  • Plane1
  • Plane2
  • Plane3
  • Plane4
  • Plane5
  • Plane6
  • Plane7
  • Plane8
  • Plane9

作成したオブジェクトをPrefabにしていきます。まずは管理がしやすいようにPrefabsというフォルダを作ってそこへHierarhyからPlane0~Plane9を選択しProjectへドラッグアンドドロップします。

Prefab化

このように青字で表示されればPrefabになっています。

Prefab化が成功したらHierarhy内のオブジェクトは削除してOKです。

オブジェクトの削除

ここまでで地面となるオブジェクトの作成は完了です。重要なのはProjectの中に地面となるオブジェクトがPrefabとして存在することです。この後、Scriptでシーン内にPrefabのオブジェクトを生成してきます。

地面を無限に作るScriptを作成

ここからScriptを作成してきます。

Project内で右クリック→Create → C# Script をクリックして「PlaneScript」という名称のScriptを作成してください。※名前は何でもOKですがこれから紹介するコードをコピペする場合は同じ名前にしておいてください。

今回作成したScriptは以下になります。

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

public class PlaneScript : MonoBehaviour
{
    public List<GameObject> stage;

    GameObject[] step = new GameObject[10];

    public float speed = 10;
    private float disappear = -10;
    private float respawn = 30;
    
    void Start()
    {
        for (int i = 0; i < step.Length; i++)
        {
            step[i] = Instantiate(stage[i], new Vector3(4 * i, 0, 0), Quaternion.identity);
        }
    }
    
    void Update()
    {
        for (int i = 0; i < step.Length; i++)
        {
            step[i].gameObject.transform.position -= new Vector3(speed * Time.deltaTime, 0, 0);
            if (step[i].gameObject.transform.position.x < disappear)
            {
                step[i].gameObject.transform.position = new Vector3(respawn, 0, 0);
            }
        }
    }
}

重要な部分をかいつまんで解説してきます。

地面はオブジェクトかを設定する

public List<GameObject> stage;

GameObject型のListを作成します。後でPrefabをアタッチしていきます。

オブジェクトを作成する

step[i] = Instantiate(stage[i], new Vector3(4 * i, 0, 0), Quaternion.identity);

現状ではシーン内にオブジェクトは存在しません。そこでInstantiateを使ってPrefabのおジェクトをシーン内に作成していきます。

地面の位置を移動させる

step[i].gameObject.transform.position -= new Vector3(speed * Time.deltaTime, 0, 0);

transform.positionで位置を移動させます。カメラは固定してあるので進んでいるように画面上では見えます。

各設定を行う

それでは最終仕上げで各設定をおなっていきます。

Scriptのアタッチ

Scriptが完成したらシーン内にアタッチしていきます。

Hierarchy内で右クリック→Create Empty で空のGameObjectを作成します。名前を「GameManager」と変更しておきます。

作成したProject内のScriptをGameManagerのInspectorにドラッグアンドドロップしてアタッチします。

Scriptのアタッチ

Listへのオブジェクト設定

ListへPrefabを登録していきます。

Listの設定

Projectフォルダ内のPrefabをListのStageへドラッグアンドドロップしていきます。

これで設定は完了です。

動かしてみる

実際に動かしてみるとこんな感じに地面が無限に生成されていきます。

本記事の内容は以上です。次回はプレイヤーの作成をしていきたいと思います。

参考書の紹介。価格はかなり高いですがこの1冊あればOKな充実した内容!!

書籍を購入して勉強するのもいいですが専門書は高いし、質問もできません。私はいつも世界最大級のオンライン学習サイトUdemyで学習を行っています。Udemyでは具体的な方法を教えてくれるし質問も可能なのでとても学習しやすいと感じています。セールも定期的に実施されています。私は90%オフもの講義もたくさんあるので私はセールを狙って購入しています。
「Udemy」公式サイト:https://www.udemy.com/
IT業界での転職を考えている人はIT求人ナビをご利用ください。
より良い環境への転職を考えている人はA8.netへの転職を考えてみては。
更に上のエンジニアを目指すならテックアカデミーがおすすめ。

コメント

タイトルとURLをコピーしました