Unityは、ゲームエンジンとして個人から大手企業まで幅広く使われています。

今回はUnityを使用し3Dゲームを制作する方法を解説していきます。

|Unityとは

Unityは、ユニティ・テクノロジーズ社によって開発された、優れたゲームエンジンです。

このツールは、2Dおよび3Dのゲーム制作に幅広く対応し、世界中で幅広く利用されています。

さらに、Windows、Mac、iOS、Androidなど多くのプラットフォームにも対応しています。

Unityは、ゲーム開発の全段階を統合的に行える環境を提供しており、プログラミングの知識がなくても利用できます。

視覚的なインターフェースを備え、ドラッグ&ドロップでキャラクターやオブジェクトを配置し、動作を設定できます。

さらに、プログラミング言語であるC#を使用してカスタマイズすることも可能で、開発者のスキルに合わせた柔軟性を提供しています。

Unityは主にゲーム開発に使用され、3Dゲーム、スマートフォンゲーム、XRコンテンツ、アプリ開発など多岐にわたる分野で活躍しています。

ゲームエンジンは、ゲーム開発を効率化するためのツールで、必要な要素や共通の処理を提供し、ゲーム制作を容易にします。

Unityは、開発工程を効率化し、高品質なゲーム制作を初心者からプロまで実現できる優れたゲームエンジンです。

Unityとは?特徴や作品事例、価格など徹底解説!
Unityとは?特徴や作品事例、価格など徹底解説!

|Unityで3Dゲームを作るメリット

Unityで3Dゲームを作るメリットについて解説していきます。

初心者でも簡単につくれる

Unityは初心者にとっても非常に使いやすいゲーム開発プラットフォームです。

直感的なインターフェースと豊富なチュートリアル、コミュニティのサポートにより、プログラム経験の少ない人でも3Dゲームを制作できます。

ビジュアルプログラミングツールであるBoltも利用でき、コーディングが苦手な人にもアクセスしやすくなっています。

情報量が多く参考にしやすい

Unityのコミュニティは非常に活発で、オンライン上には豊富な情報やリソースが存在します。

公式ドキュメンテーションやチュートリアル、フォーラム、YouTubeのチャンネルなど、学習材料が多数用意されています。

これにより、問題が発生した際に簡単に解決策を見つけることができます。

マルチプラットフォームに対応

Unityは複数のプラットフォームに対応しており、Windows、Mac、iOS、Android、コンソールなど幅広いデバイスでゲームを実行できます。

一度の開発作業でさまざまなプラットフォームに展開できるため、開発効率が向上できます。

アセットストアが豊富

Unityのアセットストアには、3Dモデル、テクスチャ、サウンドエフェクト、プラグイン、エディタ拡張など、様々なリソースが豊富に用意されています。

これにより、ゲーム制作のための資産を簡単に入手でき、プロジェクトの開発期間を短縮できます。

また、有料・無料の選択肢もあり、予算に合わせたリソースの取得が可能です。

|Unityで3Dゲームを作る方法

ここからは簡単な3Dゲームを作る方法について解説していきます。

Unityをダウンロードする

Unityの公式ウェブサイト(https://unity.com/download)からUnity本体をダウンロードします。

ダウンロードした「UnityHubSetup.exe」を実行し、ライセンス契約書を読んで同意し、インストールします。

初めてのユーザーはUnity Hubを起動後、アカウントを作成します。

Unity Hub画面右側のユーザーアイコンをクリックし、「サインイン」をクリックします。

GoogleアカウントやFacebookアカウントを持っている場合、それらのアカウントでログインします。

GoogleアカウントやFacebookアカウントを持っていない場合、「ID作成」をクリックして、メールアドレス、パスワード、ユーザーネーム、フルネームを入力し、利用規約に同意して「Unity IDアカウントを作成」をクリックします。

登録したメールアドレスに届いたメールを開き、「Link to confirm email」をクリックし、「私はロボットではありません」にチェックを入れて検証します。

サインインページが表示されたら、Unity IDアカウントの作成が完了します。

Unity Hubの画面に戻り、「続行」をクリックし、サインインが成功したことを確認します。

プロジェクトを作成する

UnityHubの「プロジェクト」タブより、「新規作成 or New project」をクリックします。

3Dを選択し、プロジェクト名の変更と保存先を設定し、作成をクリックし、プロジェクトを作成できます。

キャラクターをインポートする

Unityで提供されているキャラクター「Unityちゃん」をダウンロードしましょう。

https://unity-chan.com/download/index.php)

ダウンロードしたUnity PackageをUnityに入れてください。

Assets > UnityChan > SD_unitychan > Modelsより

SD_unitychan_genericをHierarchyにドラッグ&ドロップしてください。

SD_unitychan_genericの右クリックし、Renameををクリック。

「Player」に変更してください。

これで、キャラクターのインポートが完了です。

カメラ操作を付ける

・「Cinemachine」のインストール

カメラ操作に必要な「Cinemachine」をインストールします。

Window > Package Manager 

開いたPackage Managerのウインドウ左上より「in project」から「UnityRegistry」に変更

検索欄より、「Cinemachine」を入力し、インストールしてください。

GameObject > Cinemachine >Free Look Camera をクリックし、「CM FreeLook1」が追加されます。

・「CM FreeLook1」の設定方法

「Player」を右クリックし、「Create Empty」をクリック。名前を「LookPos」にします。

「LookPos」をUnityちゃんの目の中心ぐらいまで上に移動させます。

「CM FreeLook1」を選択し、inspectorより「CinemachineFreeLook」を以下のように変更します。

・「Follow」 > 「Player」をドラック&ドロップ

・「Look At」 > 「LookPos」をドラック&ドロップ

・「Y Axis」> 「Invert」チェックを付ける

・「X Axis」> 「Invert」チェックを外す。

・「Orbits」の「TopRig」「MiddleRig」「BottomRig」の「Redius」を上から値を「3,6,2」に変更します。

シーンを再生すると、マウスを動かすことで、カメラの移動が可能になりました。

アニメーションを付ける

・「Animator controller」の生成方法

「Projects」からAssets > Create > Animator controller を選択

名前を「Player」にし、「Animator controller」を生成します。

・「パラメータ」の設定方法

生成した「Player」をダブルクリックし、「Animator」を開きます。

「Parameters」を選択し、プラスアイコンをクリックし、「Bool」を選択します。

値の名前を「Speed」にします。

・「ステート」の生成方法

「Base Layer」上を右クリックし、Create State > Emptyをクリックします。

「New State」が「Base Layer」上に生成されます。

「New State」の名前を「Idol」に変更します。

同様に、2つのステートを追加し、名前を「Walk」「Run」にしましょう。

・各ステートへのアニメーションの設定方法

次に各ステートに「Motion」を以下のように設定していきます。

・「Idol」> 「Standing@loop」

・「Walk」> 「Walking@loop」

・「Run」>「Running@loop」

・アニメーションを遷移させる方法

「Idol」ステートを右クリックし、「Make Transition」をクリックします。

矢印が「Idol」から出てくるので、「Walk」ステート上で再度左クリックをします。

「Idol」と「Walk」が矢印で遷移ができるようになります。

同様に、以下の図のような形になるように、遷移を設定させていきます。

・遷移の「Has Exit Time」の設定

「Idol」>「Walk」の矢印をクリックし、インスペクターより「Has Exit Time」の設定を変更していきます。

「Has Exit Time」 のチェックを外します。

これは各遷移で同じような設定にします。

「Has Exit Time」が有効な場合、現在のアニメーションが完了するまで次のステートへの遷移が遅延します。一方、無効にすると、条件が満たされるとほぼすぐに次のアニメーションに移行します。

・遷移するための条件を設定

「Idol」>「Walk」の矢印をクリックし、インスペクターより「Conditions」の設定を変更していきます。

「Conditions」のプラスボタンをクリックし、

・「Idol」>「Walk」Speed Greater 0.01 に設定しましょう。

同様に、

・「Walk」>「Idol」Speed Less 0.01 

Hierarchyより「Player」を選択。

インスペクターからAnimatorの「Controller」の中に先ほど生成した、「Player」をドラッグ&ドロップしてください。

これで、アニメーションの設定ができました。

キャラクターを移動させる

・CharacterControllerを追加しよう

Hierarchy > Player > インスペクターの下のAdd Componet をクリック。

検索欄に「CharacterController」と入力し追加します。

「CharacterController」の設定を以下のように変更していきます。

・Skin Width → 0.01

・Min Move Distance → 0

・Center → (0, 0.5, 0)

・Radius → 0.3

・Height → 1

・スクリプトの作成

Projectを右クリックから

Create > C# Scriptを生成

名前を「Player」にします。

「Player」には以下を記述してください。

using System.Collections;using System.Collections.Generic;using UnityEngine;using Cinemachine;
public class Player : MonoBehaviour {
    CharacterController con;    Animator anim;
    float walk = 3f; // 通常時の移動速度    float jump = 8f; // ジャンプ力    float gravity = 10f; // 重力の大きさ    Vector3 moveDirection = Vector3.zero;
    Vector3 startPos;
    void Start() {        con = GetComponent<CharacterController>();        anim = GetComponent<Animator>();
        // マウスカーソルを非表示にし、位置を固定        Cursor.visible = false;        Cursor.lockState = CursorLockMode.Locked;
        startPos = transform.position;    }
    void Update() {        // カメラの向きを基準にした正面方向のベクトル        Vector3 cameraForward = Camera.main.transform.forward;        cameraForward.y = 0;        cameraForward.Normalize();
        Vector3 moveZ = cameraForward * Input.GetAxis(“Vertical”) * walk;        Vector3 moveX = Camera.main.transform.right * Input.GetAxis(“Horizontal”) * walk;
        anim.SetFloat(“Speed”, (moveZ + moveX).magnitude);
        Vector3 direction = moveZ + moveX;        if (direction.magnitude > 0.1f) {            Quaternion targetRotation = Quaternion.LookRotation(direction);            transform.rotation = Quaternion.Slerp(transform.rotation, targetRotation, Time.deltaTime * 10f);        }
        // Move は指定したベクトルだけ移動させる命令        moveDirection = moveZ + moveX;        // 重力の計算        if (con.isGrounded) moveDirection.y = 0f;        if (Input.GetButtonDown(“Jump”)) moveDirection.y = jump*100;        else         {         moveDirection = moveZ + moveX + new Vector3(0, moveDirection.y, 0);         moveDirection.y -= gravity * Time.deltaTime * 100;         }
        con.Move(moveDirection * Time.deltaTime);    }
    public void MoveStartPos() {        con.enabled = false;        moveDirection = Vector3.zero;        transform.position = startPos + Vector3.up * 10f;        transform.rotation = Quaternion.identity;        con.enabled = true;    }}

・動作確認

WASDキーで動くこと、スペースキーでジャンプするかを確認できれば完成です。

ステージを作成する

Hierarchyを右クリック「Cube」と「Plan」を生成しましょう。

「Plan」を床に見立て、「Cube」を障害物として適当に好きな位置に配置しましょう。

Assetsを右クリックし、

Create > Material を選択

名前を「Red」にします。

「Red」を選択し、Ctrl + cをした後 Ctrl + v で複製していきます。

複製したマテリアルの名前は「Green」と「Blue」にしましょう。

それぞれのマテリアルを選択し、「Albedo」の設定を変更していきます。

各マテリアルの名前にそって、色を変更していきます。

先ほど追加した「Plan」に「Green」のマテリアルをドラッグ&ドロップし割り当てます。

同じように、「Cube」に「Red」または「Blue」を割り当てればステージは完成です。

落下判定を付ける

床から落ちてしまうと永遠に落ち続けてしまうので、そうならないようにするための設定をしていきます。

・デッドゾーンを作成

GameObject > CreateEmptyからのオブジェクトを生成します。

名前を「DeadZone」にします。

以下のパラメータを設定します。

・Position (0,-30,0)

・Scale (100,1,100)

・当たり判定を追加

「DeadZone」にAdd Componentより「BoxCollider」を追加します。

「IsTrigger」にチェックを入れます。

・プレイヤーを初期位置に戻すスクリプトを作成

Projectを右クリックから

Create > C# Scriptを生成

名前を「DeadZone」にします。

「DeadZone」には以下を記述してください。

using System.Collections;using System.Collections.Generic;using UnityEngine; public class DeadZone: MonoBehaviour{   private void OnTriggerEnter(Collider other)   {         // プレイヤーは初期位置にワープさせる        // それ以外のオブジェクトは破壊する        if(other.CompareTag(“Player”))        {            Player player = other.gameObject.GetComponent<Player>();            player.MoveStartPos();         }        else        {            Destroy(other.gameObject);        }   }}

「DeadZone」をオブジェクトにドラッグ&ドロップしてください。

・Tagの変更

「Player」を選択すると、Tagが「Untagged」になっていると思います。

こちらを「Player」に変更します。

これで、「DeadZone」に触れたときにリスポーンすることができるようになりました。

|まとめ

簡単な3Dアクションゲームができましたでしょうか?

少しプログラミングなどもしますが、Unityにはコードを使わずに機能を追加することもできます。

試しに、自分好みのゲームを作ってみてはいかがでしょうか。