Unityに関連する記事です

製作物の概要


 3Dで表現されたゲーム世界で、移動については2D横スクロールとなるアクション・ゲームを製作します。スマホで動作するため、気軽に楽しめます。
イメージとしては、風のクロノアシリーズ(PS)、ヨッシークラフトワールド(Nintendo Switch)、PaperMasters(スマホ)などがあります。

参考サイト
Unity 公式マニュアル
2D/3Dプロジェクト
https://docs.unity3d.com/ja/current/Manual/2Dor3D....


 ゲーム画面は3D表現ですが、プレイヤーの移動は2D方向(上下・左右方向)に固定されています。
3D空間での移動は操作に慣れるまで難しいのですが、この部分を2Dにしているため、奥行きの表現を楽しみつつ、快適な操作ができるアクションゲームの製作を目指します。

 プレイヤーの移動の他、ジャンプや攻撃といったアクションを盛り込み、ゲーム画面も左右だけではなく、上下方向・前後(奥行き)にも自動的にスクロールします。

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

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


<動画 3D空間を2D軸で移動する>

<動画 カメラが自動的に切り替わり、移動軸も自動的に変化する>

<動画 3Dのルート上を2D軸移動する>

システムとルール


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

 ゲームの見た目は3Dですが、プレイヤーの移動は上下左右のみです。
奥行きのある画面ではありますが、画面の前後への移動はできないようにするため、実質2D軸での操作になります。

 プレイヤーは3人称視点であり、カメラは自動でプレイヤーの追従移動を行います。
この際、発展編においては、2D軸はそのままで、自動的に奥行きを加味した移動を実装します。
こちらを実装することで、カメラが3D空間を移動してプレイヤーの追従を行うため、画面の見た目が変化します。

 プレイヤーにはアクションが用意されており、左右移動の他、ボタンを押すことで前方に向かってバレット(弾)を打ち出したり、武器を振ったりする攻撃を行います。
ジャンプ、ダッシュといった要素も追加することで、一般的なアクションゲームに用意されている機能を実装します。

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

 ステージの最後にはボスを用意し、倒すことができればゲームクリアとなります。



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



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

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

完成図


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


1.ゲームの流れ


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



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

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


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



 ステージには敵やギミックを配置しておき、最初から見えているものもあれば、特定の位置にプレイヤーが移動した際に出現するものもあります。
これらの障害を乗り越えて、最後のボスまで到達し、プレイヤーの体力が 0 になる前にボスを倒すことが出来ればゲームクリアです。

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

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

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


学習内容


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

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

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

 ・設計に沿った製作作業
 ・アセットストアからインポートしたアセットの利用方法について
 ・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の補間機能と実装例  DOValue メソッドー
 ・キャスト処理
 ・復習しながら、自分で処理を書いてみる
 ・Start メソッドの役割を持つメソッドを作成して利用する方法
 ・複数行の処理を1行にまとめて記述する方法
 ・スクリプトの参照利用方法
 ・条件式時のbool型の省略記法
 ・問題点の切り分けを行う方法
 ・Transform.SetParent メソッド
 ・static クラスと static 変数の宣言
 ・static メソッドの利用方法
 ・プロパティ
 ・Debug.Log メソッドを利用した処理の流れの確認方法
 ・StartCoroutine メソッド
 ・引数を利用して外部のスクリプトから情報を取得して利用する方法
 ・省略可能な引数を持つメソッドを定義する方法と使用方法
 ・DOTweenの補間機能と実装例◆ DOLocalMoveY メソッドー
 ・CanvasGroup コンポーネントの機能について
 ・DOTweenの補間機能と実装例 −DOFade メソッド−
 ・DOTweenの補間機能と実装例ぁ DOText メソッド−
 ・Start メソッドと Update メソッドの利用方法を考える
 ・Start メソッドに依存しない設計



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

 ・リファクタリングを行い、関連する処理を1つのスクリプトにまとめる方法
 ・スクリプトを経由して別のスクリプトの処理を実行していく方法
 ・enum だけのスクリプト・ファイルの作成
 ・スクリプタブル・オブジェクトの作成とデータの登録
 ・クラス内に別のクラスを作成する(入れ子クラス)
 ・[System.Serializable(シリアライザブル)]属性
 ・List の初期化
 ・入れ子クラスを外部のクラスで宣言する方法
 ・スクリプタブル・オブジェクトを利用する方法
 ・スクリプトを活用して1つのゲームオブジェクトの振る舞いを変えて、異なる役割を与える方法
 ・引数と戻り値を使った処理の実装例
 ・enum を条件に利用した switch 文の実装例
 ・Listの使い方  Add メソッドー
 ・入れ子クラスを外部のクラスで利用する方法
 ・スクリプタブル・オブジェクトに新しい情報を追加する
 ・シングルトンデザインパターンによるクラスの作成と活用
 ・複数のスクリプトを経由して処理を実行していくロジックの考え方と設計方法
 ・ゲームの設定関連の値を1つのスクリプトに集約し利用する方法
 ・DOTweenの補間機能と実装例ァ DOLocalMoveX メソッド、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 を利用したスクリプタブル・オブジェクト内のデータの抽出処理の自作
 ・BulletData の情報をどのようにすれば利用できるようになるか、ロジックを考える
 ・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



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

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