Unityは、ゲームエンジンとして個人から大手企業まで幅広く使われています。
今回はUnityを使用し3Dゲームを制作する方法を解説していきます。
目次
|Unityとは
Unityは、ユニティ・テクノロジーズ社によって開発された、優れたゲームエンジンです。
このツールは、2Dおよび3Dのゲーム制作に幅広く対応し、世界中で幅広く利用されています。
さらに、Windows、Mac、iOS、Androidなど多くのプラットフォームにも対応しています。
Unityは、ゲーム開発の全段階を統合的に行える環境を提供しており、プログラミングの知識がなくても利用できます。
視覚的なインターフェースを備え、ドラッグ&ドロップでキャラクターやオブジェクトを配置し、動作を設定できます。
さらに、プログラミング言語であるC#を使用してカスタマイズすることも可能で、開発者のスキルに合わせた柔軟性を提供しています。
Unityは主にゲーム開発に使用され、3Dゲーム、スマートフォンゲーム、XRコンテンツ、アプリ開発など多岐にわたる分野で活躍しています。
ゲームエンジンは、ゲーム開発を効率化するためのツールで、必要な要素や共通の処理を提供し、ゲーム制作を容易にします。
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にはコードを使わずに機能を追加することもできます。
試しに、自分好みのゲームを作ってみてはいかがでしょうか。