Unityに関連する記事です

製作物の概要


 3Dで表現されたゲーム世界においてタップで操作できるアクション・ゲームを製作します。スマホで動作するため、気軽に楽しめます。






参考サイト
Unity 公式マニュアル 2D/3Dプロジェクト



 Unity の機能についても、広く学習することが出来ます。

 ・Universal Render Pipeline(URP)
 ・Cinemachine
 ・PostProcessing
 ・NavMeshAgent
 ・OffMeshLink

 ゲーム画面は3D表現です。NavMeshAgent の機能を利用して、タップした地点に対して自動的に経路を計算し、キャラクターの移動を行います。
また OffMeshLink の機能を利用することで、離れている地点に対してもタップで移動を行います。その際にはジャンプのアニメを再生させます。

 カメラワークについては Cinemachine の機能を活用し、複数のカメラを使い分けます。
例えば、ギミックの起動に合わせてカメラを移動させたり、ビューの切り替えを行ったりします。

 綺麗な画面の表現の方法として PostProcessing の機能を利用し、カメラにエフェクトを施し、見栄えを美しくします。


<動画 タップした位置に移動する(NavMeshAgent の機能の活用)>

<動画 タップで帽子アクション。帽子を当てることでギミックを作動させたり、敵を攻撃したりする>

<動画 離れている地点にもタップで移動(OffMeshLink の機能の活用)>

<動画 ギミックの作動(Cinemachine の機能の活用)>

<動画 ビューの変更(ここでは3つの Cinemachine カメラを利用)>

<動画 トラップ接触時の処理>

<動画 PostProcessing によるカメラのエフェクト>

システムとルール


 このゲームを製作するためには、最初に3Dの世界を構築します。
そのため、その世界観がそのままゲームの舞台になります。(そのため自由にデザイン変更できます)

 レベルデザインとしては、同じサイズのタイル状のゲームオブジェクトを敷き詰めてステージ(レベル)を作成します。
タイルを上手く配置するための手法についても学習します。

 プレイヤーの移動はタイル状のステージ内となります。タイルをタップすると、その地点まで移動します。

 ゲームの視点(カメラ)は3人称視点であり、プレイヤーを画面の中心として自動的に追従移動を行います。

 プレイヤーには帽子によるアクションが用意されており、移動と同様に画面をタップすることで、その方向に向かって帽子を飛ばすことが出来ます。
帽子にはコライダーをアタッチしておくことにより、ギミックを作動させたり、敵を攻撃する要素を追加します。

 アクションゲームにおいて広く利用されているジャンプについては、離れている地点への移動においてのみ、NavMeshAgent 内の OffMeshLink の機能を利用して実装します。
そのため、ボタンを押してその場でジャンプをさせるという機能ではありません。(自動的にジャンプのアニメが利用されて、ジャンプしているように見せます。)



 ステージにはゴール地点が設定されており、この地点までキャラクターを移動させることで、ステージクリアとなります。
 
 ただしステージ内にはギミックやトラップがあり、ただ画面をタップして移動するだけではクリア出来ません。
ゴールの扉は閉まっていることが多いため、開くためにはギミックを作動させたり、特定のアイテムを取得したり、敵をたくさん倒したり、という形で
ゴール地点に辿りつくためには、様々な条件があります。

 他にもクリアの目的は設定できますので、自分のイメージしているゲーム性に沿った目的を作成しましょう。



 プレイヤーは残機制であり、トラップに接触したり、敵に接触したり、敵から攻撃を受けるとダウンし、残機数が1つ減少します。
これにより残機が 0 になってしまったらゲームオーバーです。



 ゲームオーバー、あるいはゲームクリア時には再度タップすることで、もう一度ゲームを最初からプレイできます。
この部分をステージ制などに変更すれば、1つのゲームサイクルとして完成できます。

 発展要素としましては追加のルールを考えたり、色々なアイテムを用意したり、アイディアを考えることで新しい楽しみ方を設計出来ます。
 

完成図


 この教材をすべて完成させると、以下のような画面構成を持つゲームになります。




1.ゲームの流れ


 今回は1つのシーンでのみゲームを作成しています。そのため、タイトルシーンなどは教材内にはありません。
必要であれば、タイトルシーンについては自分で考えて楽しいイメージの設計を行って実装をしてみてください。



 ゲームを実行すると、メインとなるアクションゲームがスタートします。

 発展編ではゲームスタートの演出などを行います。


 
 続いて、ステージ内をタップで移動したり、帽子アクションを行うことが可能になります。
ステージは事前に経路の計算が行われており、NavMeshAgent の AI 機能によって、タップした地点に移動が行える場合には最短ルートで移動を行います。
また、離れている地点に対しても OffMeshLink の機能を利用することで AI の経路計算に含めることが出来るようになります。

 こちらも事前に計算しておくことにより、例えば、ギミックを作動させることで、離れている地点に対してはじめて移動可能になる、といったことも実現できます。



 カメラワークにも注目し、Cinemachine の機能を利用することで、ギミック作動時にカメラをシームレスに移動させて扉が開く所を見せたり、
カメラの視点を変更することで、画面の見え方を変更出来るようにします。


通常の斜め見下ろし視点



真上からのトップビュー視点



手前からのフロント視点




 また、PostProcessing の機能を利用することで、画面に対して様々なエフェクトを演出出来ます。


カメラのエフェクトなし



カメラのエフェクトあり



 PostProcessing を効果的に活用することにより、画面の見栄えが相当変わります。



 ステージには敵やギミックを配置しておき、最初から見えているものもあれば、特定の位置にプレイヤーが移動した際に出現するものもあります。

 ゲームクリアすると、再ゲームスタートのタップを促す表示と、ゲームクリアの演出が入ります。

 ゲームクリア、あるいはゲームオーバー時に画面をタップすると、再度ゲームをスタートすることが出来ます。

 ここでゲームをサイクル化しています。


学習内容


 3Dタップアクションゲームを製作していくことで、習得することを目標とする技術を記載しておきます。

 また、スクリプトに関しては、たくさん書いて覚える、ということを主軸として記述を行っています。
一見、合理的・機能的には見えない処理もありますが、あくまでも書いて覚えるための手順書になっています。

 そのため、学習状況によっては、もっとスマートに書けるのでは? と感じる方もいると思いますが
そうした「気づき」を感じた方は自分なりの記述方法を考えて、よりよいスクリプトを書いていく練習としてこの教材を活用してください。

 ・設計に沿った製作作業
 ・アセットストアからインポートしたアセットの利用方法について
 ・Raycast Target 機能
 ・CanvasRenderer コンポーネントの Cull Transparent Mesh 機能
 ・UnityEditor のセーブ用ショートカットボタン
 ・RequireComponent属性
 ・Header属性
 ・Ray と RaycastHit 構造体
 ・Physics.Raycast メソッド
 ・Destroy メソッド
 ・Summary(サマリー)機能
 ・プレファブの作成
 ・Instantiate メソッド  欅数の種類と内容−
 ・Instantiate メソッド◆ 写瓩蠱佑粒萢僉
 ・ピリオドによる処理の読み解き方
 ・Input.mousePosition 変数
 ・Camera.ScreenPointToRay(Vector3 position) メソッド
 ・Vector3.normalized 変数を利用した正規化処理
 ・Tag の設定
 ・処理のメソッド化
 ・TryGetComponent メソッドと out キーワード宣言
 ・TODO 機能
 ・アンカー設定
 ・親子関係の利用方法
 ・SerializeField 属性
 ・アタッチとアサインについて
 ・Mathf.Clamp メソッド
 ・DOTweenの補間機能と実装例  Transform.DOLookAt メソッドー
 ・キャスト処理
 ・復習しながら、自分で処理を書いてみる
 ・Start メソッドの役割を持つメソッドを作成して利用する方法
 ・複数行の処理を1行にまとめて記述する方法
 ・スクリプトの参照利用方法
 ・条件式時のbool型の省略記法
 ・問題点の切り分けを行う方法
 ・Transform.SetParent メソッド
 ・static クラスと static 変数の宣言
 ・static メソッドの利用方法
 ・プロパティ
 ・Debug.Log メソッドを利用した処理の流れの確認方法
 ・StartCoroutine メソッド
 ・引数を利用して外部のスクリプトから情報を取得して利用する方法
 ・省略可能な引数を持つメソッドを定義する方法と使用方法
 ・DOTweenの補間機能と実装例◆ DOCounter メソッドー
 ・CanvasGroup コンポーネントの機能について
 ・DOTweenの補間機能と実装例 −DOFade メソッド−
 ・DOTweenの補間機能と実装例ぁ DOText メソッド−
 ・Start メソッドと Update メソッドの利用方法を考える
 ・Start メソッドに依存しない設計
 ・NavMeshAgent 関連  Static 設定、Bake 処理ー
 ・NavMeshAgent 関連◆ SetDestination メソッド、ResetPath メソッド、speed 変数ー
 ・NavMeshAgent 関連 ーOffMeshLink の設定。isOnOffMeshLink 変数ー
 ・Cinemachine 関連  Follow 設定。Body 設定。Aim 設定ー
 ・Cinemachine 関連◆ Priority プロパティー
 ・SkyBox の設定



 発展編として、以下の技術についても学習します。

 ・リファクタリングを行い、関連する処理を1つのスクリプトにまとめる方法
 ・スクリプトを経由して別のスクリプトの処理を実行していく方法
 ・enum だけのスクリプト・ファイルの作成
 ・スクリプタブル・オブジェクトの作成とデータの登録
 ・クラス内に別のクラスを作成する(入れ子クラス)
 ・[System.Serializable(シリアライザブル)]属性
 ・List の初期化
 ・入れ子クラスを外部のクラスで宣言する方法
 ・スクリプタブル・オブジェクトを利用する方法
 ・スクリプトを活用して1つのゲームオブジェクトの振る舞いを変えて、異なる役割を与える方法
 ・引数と戻り値を使った処理の実装例
 ・enum を条件に利用した switch 文の実装例
 ・Listの使い方  Add メソッドー
 ・入れ子クラスを外部のクラスで利用する方法
 ・スクリプタブル・オブジェクトに新しい情報を追加する
 ・シングルトンデザインパターンによるクラスの作成と活用
 ・複数のスクリプトを経由して処理を実行していくロジックの考え方と設計方法
 ・ゲームの設定関連の値を1つのスクリプトに集約し利用する方法
 ・DOTweenの補間機能と実装例ァ SetLoops メソッド、SetEase メソッドー
 ・DOTweenの補間機能と実装例Α OnComplete メソッドー
 ・DOTweenの補間機能と実装例А Sequence 機能、Append メソッド、AppendInterval メソッドー
 ・UnityAction(デリゲート)の使い方
 ・エネミーとプレイヤーで同じスクリプトを利用する
 ・コルーチンメソッドを利用した while 文の実装例
 ・共通する処理を複数かかないように考えて記述する
 ・戻り値と引数を利用した処理の実装例
 ・GameObject型以外のインスタンスの方法
 ・Listの使い方◆ Count 変数、Clear メソッド−
 ・引数と戻り値を利用して処理の内容を自動分岐する処理の実装例
 ・1つのゲームオブジェクトを複数の目的に利用する方法
 ・自分でロジックを考えて組み立てる
 ・Grid Layout Group コンポーネントの使用方法
 ・for 文と Grid Layout Group コンポーネントを利用したインスタンシエイト処理の実装例
 ・ゲームの世界観を構築する
 ・クラス内に入れ子として enum を宣言して利用する方法
 ・処理の全体像から、ロジックを組み立てて実装を行う
 ・DOTweenの補間機能と実装例А DOFillAmount メソッドー
 ・foreach 文を利用した処理の実装例
 ・Selectable.interactable プロパティ
 ・Startメソッドの戻り値を void から IEnumerator 型にして使用する処理
 ・yield return StartCoroutine メソッドによる待機処理
 ・if文の条件式に戻り値を持つメソッドを利用する場合の実装例
 ・引数に条件式を利用する方法
 ・プロパティを自作する
 ・switch 文の実装例
 ・配列の活用方法の実装例
 ・GameObject.FindGameObjectsWithTag メソッド
 ・Vector3.MoveTowards メソッド
 ・パーティクルのエフェクトを Canvas 上で再生する方法
 ・DOTweenの補間機能と実装例─ DOPunchScale メソッドー
 ・DOTweenの補間機能と実装例 ーDOShakeScale メソッドー
 ・Block Raycast プロパティ
 ・DOTweenの補間機能と実装例 ーDOLocalJump メソッドー
 ・順序立てた処理の制御の実装例
 ・順序立てた処理のロジックを自分で考えて実装を行う
 ・今までの処理を復習し、自分の設計でスクリプタブル・オブジェクトや static クラスを新しく作成する
 ・戻り値を持つメソッドの処理の実装例 −if 文の条件式、引数への指定、戻り値後の型に対して続けて記述する処理−
 ・タプル型の実装例
 ・戻り値を持つメソッドの自作
 ・List を利用したスクリプタブル・オブジェクト内のデータの抽出処理の自作
 ・MonoBeheviour クラスを継承していないクラスの情報を、どのようにすれば利用できるようになるか、ロジックを考える
 ・BGMを鳴らす場面・シーンを考える
 ・AudioSource.Playメソッド、AudioSource.Stopメソッド、AudioSource.clip 変数
 ・DOTweenの補間機能の実装例 ーAudioSource.DOFadeメソッドを利用したBGMのクロスフェード演出処理ー
 ・AddComponent メソッド
 ・オーディオファイルの容量圧縮やメモリ使用の設定
 ・自分で処理全体の設計ロジックを考えて1つずつ処理を実装する



拡張編として、以下の技術についても学習します。

 ・ブロック記号({ })の省略書式
 ・処理のコメントをなるべくゲーム上の動きで記述する
 ・DOTweenの補間機能の実装例 ーDOTween.TO メソッドを利用した数字の変動アニメ演出処理ー
 ・処理を組み合わせた演出を考えて実装する
 ・Any State を利用したステートの遷移処理の実装例
 ・Animator.ResetTrigger メソッド


重点学習箇所

1.アセット(インポートしたゲームオブジェクトやスクリプト)の利用方法


 多くはプレファブとしてすぐに利用できる形でゲームオブジェクトやパーティクルシステムの再生されるエフェクトを提供しています。
またGithubに公開されている無料のスクリプトがゲームの演出をサポートしてくれます。

 フォントやロゴ、オーディオファイル、イラストなどについても無料のサイトがあります。

 それらを上手くゲーム内に活用していく方法を学習します。


GameStart のロゴの例



数字のフォントとアウトラインによる文字装飾の例



2.DOTweenの使い方


 DOTweenの基本的な使用方法と応用方法について学習します。
演出を加えると画面が華やかになるとともに、一気にゲームの見た目のレベルがアップします。


3.NavMeshAgent、OffMeshLink の活用


 Unity にはゲームオブジェクトを経路に沿って移動させる NavMeshAgent と サポートする OffMeshLink の機能があります。
これらの AI 機能を活用したゲームオブジェクトの移動処理を学習します。

 今回はプレイヤー側についてはタップと連動させ、敵については自動的にプレイヤーに向かって移動してくる機能の、2つの用途として利用します。


4.Cinemachine によるカメラの制御

 
 Unity には Cinemachine(シネマシン)というカメラの機能が搭載されています。
こちらを利用して、プレイヤーを追従させたり、画面の演出を作成することが出来ます。


5.PostProcessing の活用


 カメラのエフェクトにより画面の見栄えが変わりますので、PostProcessing の機能を学習します。



 Unityの持つ機能を上手く活用していくことで、こういったゲーム内の処理を実装することが出来ます。

 以上でこの手順は終了です。

 => 次は 設計を考える です。

コメントをかく


「http://」を含む投稿は禁止されています。

利用規約をご確認のうえご記入下さい

Menu



技術/知識(実装例)

2Dおはじきゲーム(発展編)

2D強制横スクロールアクション(発展編)

3Dダイビングアクション(発展編)

2Dタップシューティング(拡張編)

レースゲーム(抜粋)

2D放置ゲーム(発展編)

3Dレールガンシューティング(応用編)

3D脱出ゲーム(抜粋)

2Dリアルタイムストラテジー

2Dトップビューアドベンチャー(宴アセット使用)

3Dタップアクション(NavMeshAgent 使用)

2Dトップビューアクション(カエルの為に〜、ボコスカウォーズ風)

VideoPlayer イベント連動の実装例

VideoPlayer リスト内からムービー再生の実装例(発展)

AR 画像付きオブジェクト生成の実装例

AR リスト内から生成の実装例(発展)

private



このサイト内の作品はユニティちゃんライセンス条項の元に提供されています。

管理人/副管理人のみ編集できます