アマゾンバナーリンク

Unityで作る超初心者むけ3Dアクションゲーム講座

2020年6月12日

こんにちは!ジェイです。今回は初めて3Dアクションゲームを作る人のために最も簡単に作れる手順を紹介したいと思います。

準備

まずプロジェクト作成して以下の画面のようにします。

  1. 一番右上の項目をTallに設定
  2. 左上のwindow→General→Consol
  3. window→AssetStore
  4. AssetStoreからStandard Assets(for Unity 2017.3)をインポートする
  5. スクリプトを修正してゲームを実行できるようにする

AssetStoreからStandard Assets(for Unity 2017.3)をインポートする

上記からアセットをダウンロードしてインポートします。その後、Assets>SampleScenes>Scenes>CharacterThirdPersonを開きます。

エラーを修正する

GUITextは最新のUnityでは使えないので、最新版のUnityを使ってるとエラーが出ます。これの対処方法は、Consorlのエラーをクリックして、以下のようにスクリプトを変更します。具体的には、11,22,36行目をコメントアウトします。

using System;
using UnityEngine;

#pragma warning disable 618
namespace UnityStandardAssets.Utility
{
    public class SimpleActivatorMenu : MonoBehaviour
    {
        // An incredibly simple menu which, when given references
        // to gameobjects in the scene
       // public GUIText camSwitchButton;
        public GameObject[] objects;


        private int m_CurrentActiveObject;


        private void OnEnable()
        {
            // active object starts from first in array
            m_CurrentActiveObject = 0;
       //     camSwitchButton.text = objects[m_CurrentActiveObject].name;
        }


        public void NextCamera()
        {
            int nextactiveobject = m_CurrentActiveObject + 1 >= objects.Length ? 0 : m_CurrentActiveObject + 1;

            for (int i = 0; i < objects.Length; i++)
            {
                objects[i].SetActive(i == nextactiveobject);
            }

            m_CurrentActiveObject = nextactiveobject;
 //           camSwitchButton.text = objects[m_CurrentActiveObject].name;
        }
    }
}

実行結果

倉庫番のようなゲームを作る

せっかくなので、このサンプルを利用して、倉庫番のように物を決まった位置にすべて置くとクリアになるゲームを作ります。

BoxSmallを回転できないようにする

まずはBoxSmallのBoxColliderのFreeze rotationをxyzすべてにチェックを入れます。すると回転しなくなり、まっすぐ箱を押せるようになります。

そして、この判定をすべてのボックスに反映されるために、右上のOverrideからApply Allを選択しましょう。わからない場合は個別にすべて設定しても大丈夫です。

BoxSmallを識別するタグをつける

BoxSmallを選択し、インスペクターのTagというところが、Untaggedとなってるはずなので、そこを選んでAdd Tagをクリックすると以下のような画面がでるので+を押して、BoxSmallと名前を付けて保存します。

箱を置く目的の場所を作る

Hierarcyの+から3DObjetct→Planeで床を作ります。パラメーターは以下の様にしてください。これを適当な位置にSmallBoxと同じ数の6個置きます。

箱が目的の床の上に置かれているか判定する

まず空のGameObjectを作り、C#スクリプトでCGameManger.csと名前をつけアタッチする。

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

public class CGameManager : MonoBehaviour
{
    public static bool ClearFlag = false;
    void OnGUI()
    {
        if(ClearFlag)
            GUI.Label(new Rect(Screen.width/2, Screen.height/4, 100, 50), "GameClear");
    }
}

Projectの+→C#スクリプト→CBoxSmallと名前を付けて保存する。BoxSmallに以下のスクリプトをアタッチして、タグにBoxSmallと名前を付ける。

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

public class CBoxSmall : MonoBehaviour
{
    private void OnCollisionEnter(Collision collision)
    {
        //Sphereが衝突したオブジェクトがPlaneだった場合
        if (collision.gameObject.tag == "Plane")
        {
            //色を青に変化させる
            GetComponent<Renderer>().material.color = Color.blue;
            GetComponent<Rigidbody>().isKinematic = true;
            GameObject[] box_small = GameObject.FindGameObjectsWithTag("BoxSmall");
            int cnt = 0;
            for(int i = 0; i < box_small.Length; ++i)
            {
                if (box_small[i].GetComponent<Rigidbody>().isKinematic)
                    ++cnt;
            }

            if (cnt == box_small.Length)
            {
                CGameManager.ClearFlag = true;
            }
        }
    }
}

以上で簡単な3Dの倉庫番ができました。

キャラを差し替えるには

オリジナルのキャラに差し替えたい方は、FBXファイルを読み込んで、同じコンポーネントを追加すれば、簡単に差し替える事ができます。例えばユニティちゃんに差し替えたいなら以下をダウンロードしてください。

更に以下のエディタ拡張があるとコンポーネントの追加が楽にできます。