Unityに関連する記事です

製作物の概要


 3Dで表現されたゲーム世界においてアクション・ゲームを製作します。スマホで動作するため、気軽に楽しめます。
イメージとしては、白猫プロジェクト(スマホ)、リメイク版の聖剣伝説3ーTRIALS of MANAー(PS、Switch)などがあります。

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


 ゲーム画面は3D表現です。移動は左右方向と前後(奥行きの表現)を楽しみつつ、快適な操作ができるアクションゲームの製作を目指します。

 プレイヤーの移動の他、ジャンプや連続攻撃といったアクションを盛り込みます。
発展編では RPG 要素の実装を検討しましょう。

 Unity の持つ新しい機能についても多く学習することが出来ます。

 ・Universal Render Pipeline(URP)
 ・Cinemachine
 ・PostProcessing
 ・InputSystem


<動画 3D空間移動する>

<動画 プレイヤーを軸にカメラを公転回転させる>

<動画 連続攻撃>

システムとルール


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

 プレイヤーの移動は左右と前後になります。上方向にはジャンプ、下方向には落下することで移動します。
一般的な3Dアクションゲームと同じ内容です。

 プレイヤーは3人称視点であり、カメラは自動でプレイヤーの追従移動を行います。
画面の左右スワイプを行うことで、プレイヤーを軸にして、カメラを360度公転回転させます。プレイヤーが地球であると考えた場合、カメラは月という位置関係です。
画面の上下スワイプを行うことで、プレイヤーを軸にして、決められた範囲内で上下方向にもカメラの移動を行います。

 プレイヤーにはアクションが用意されており、移動の他、攻撃用のボタンを押すことで前方に向かってバレット(弾)を打ち出したり、武器を振ったりする攻撃を行います。
攻撃ボタンをタイミングよく連続で押すことで連続攻撃を行うようにします。

 ジャンプ、ダッシュといった要素も追加することで、一般的なアクションゲームに用意されている機能を実装します。

 プレイヤーがステージを移動していくと、一定の位置でイベントが発生し、敵が出現したり、ギミックが動いたりします。
すべての敵を倒すと動くギミックなども用意することも出来ます。

 ゲームクリアの目的は、2つあります。1つはステージの最後にはボスを用意し、倒すことができればゲームクリアとなります。
もう1つは、制限時間があり、その時間内、プレイヤーが生存できればゲームクリアになります。

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



 プレイヤーには体力(Hp)があり、敵の攻撃を受けると減少します。
攻撃を受けて体力が 0 になってしまったらゲームオーバーです。



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

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

完成図


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


1.ゲームの流れ


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



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

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


 
 続いて、ステージ内を移動したり、攻撃・ジャンプ・ダッシュといったアクションが可能になります。
基本的にステージは左右前後のいずれの方向にも移動可能であるため、空間を活かしたステージ作りをすることが出来ます。

 カメラワークにも注目し、あまり遠くのゲームオブジェクトは描画しないようにしたり、画面の奥にぼかし処理(Fog)を行うことで演出出来ます。



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

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

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

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


学習内容


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

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

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

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



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

 ・リファクタリングを行い、関連する処理を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.スクリプタブル・オブジェクトの活用


 Unity にはスクリプタブル・オブジェクトという、データベースを作成して利用する機能があります。
今回のゲームは、この機能を活用することによって、プレファブの振る舞いを変更する処理を実行しています。

 スクリプタブル・オブジェクトの内容はインスペクターから変更が可能です。


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

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



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

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

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

コメントをかく


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

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

Menu



技術/知識(実装例)

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

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

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

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

レースゲーム(抜粋)

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

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

3D脱出ゲーム(抜粋)

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

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

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

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

VideoPlayer イベント連動の実装例

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

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

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

private



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

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