Unityに関連する記事です

製作物の概要


 経路上を自動で移動していく(レール移動式)タイプのガン・シューティング・ゲーム(FPS)を製作します。スマホで動作するため、気軽に楽しめます。

 移動は自動で行われ、特定の地点に到達するたびにエネミー(ゾンビなど)が出現して攻撃してきます。
画面をタップするとバレット(弾)が発射されますので、それをつかって出現したエネミーをすべて倒したり、一定の時間が経過すると、次の地点へと移動します。
これを繰り返してゴール地点まで到達することを目標にするゲームです。

 タップしてエネミーにバレットを当てて倒すというシンプルなシステムですので、難しく考えなくても爽快なゲームを楽しむことができます。
また、ゲームに慣れてきたら、ヘッドショット(エネミーの頭部などの部位)を狙い、より少ない数のバレットで倒すことができますので、
上手くなっていくことでゲームへの達成感や充実感が得られる作りになっています。


<動画 ゲーム画面は自動移動する>

<動画 画面をタップすると照準の地点に弾を発射。特定の地点まで移動するとミッションが発生し、移動が一時停止>

<動画 ミッションは敵の全滅や一定時間の経過で進行。クリアすると再度移動が再開する>

<動画 移動では選択肢が表示される場合もある。いずれかの方向を選択すると移動を開始>


 発展編で学習します。

動画ファイルへのリンク


システムとルール


 このゲームを製作するためには、最初に自分で3Dの世界を構築します。
そのため、その世界観がそのままゲームの舞台になります。(そのため自由にデザイン変更できます)
今回は終末サバイバルゲームをイメージし、ゾンビなどのエネミーを倒して生き残ることが目的になっています。

 サンプルとしてはレール移動式のガンシューティングゲームとなっており、一人称視点(FPS)にてゲームが進みます。
レール移動式というのは、決められたルートを自動的に移動しながら進行していくタイプのゲームのことを指しています。
ハウス・オブ・ザ・デッド・シリーズや、タイムクライシス・シリーズをイメージしてください。

 プレイヤーは一人称視点であり、カメラは自動で移動を行います。そのため、自分で自由に操作できるのは攻撃する照準になります。

 画面をタップすると、タップした位置に向けてバレット(弾)を打ち出します

 一定の距離ごとにミッションが発生し、移動が一時停止します。このとき、ミッションをクリアするための条件があり、
敵の全滅か、一定時間の経過のいずれかになります。敵の全滅の場合には、ミッションの発生と同時にゾンビなどが出現しますので、それをすべて倒すことでクリアとなります。
ゾンビなどのエネミーにはバレットを当てることで倒すことが出来ます。タップでどんどんとバレットを発射できますので爽快感が得られるようになっています。

 またゾンビにはヘッドショットの要素があります。頭部を狙っていくと、より少ないバレット数で倒すことができます。
ヘッドショットの演出としては、頭部のみが破壊される演出を入れています。



 ゾンビが一定の距離まで近づくと攻撃されます。
画面の左下部には炎のアイコンがあり、これがプレイヤーの体力を示しています。
攻撃を受けて体力が 0 になってしまったらゲームオーバーです。
そのため、プレイヤーのそばにゾンビが到達する前に、バレットを当てて倒す必要があります

 このアイコンはパーティクルシステムによって作成されたゲームオブジェクトを利用しているため、
アニメーションの演出を行っています。いつ炎が消えてしまうのかという、臨場感があります。

プレイヤーの体力表示
動画ファイルへのリンク



 ミッションをクリアすることで、再度移動が再開します。
移動は決められたレール上を移動していきますが、特定の地点においては選択肢が表示されて、レールのルートを選択することが出来るようにします。
これはなくてもよいですが、ユーザーにいくつかの選択肢を与えることでより楽しいゲーム体験を提案出来ます。



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

 発展要素としましては追加のルール(時間の流れをゆっくりにしたり、止めたりする機能)を考えたり、
バレットの種類やゾンビの種類を増やしたり、色々なアイテムを用意したりと、色々な楽しみ方を設計出来ます。
 

完成図


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


1.ゲームの流れ


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



 ゲームを実行すると、メインとなるガンシューティングゲームがスタートします。

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


 
 続いて、画面をタップできるようになり、タップした位置に向かってバレットが発射されます。
バレットには残弾数があります。これはリロード機能を持つタイプとそうでないタイプとで実装方法を変更出来るようにしています。



 特定の地点まで移動するとミッションが発生し、ゾンビがプレイヤーの方向に向かってきますので、バレットをぶつけて倒します。




 ミッションのクリア条件を達成する(敵の全滅など)と、再び移動が再開されます。
移動の際には選択肢が表示される場合もありますので、その場合には進行方向を1つ選択することで、そちらの方向に移動を開始します。



 プレイヤーの体力が 0 になる前にゴール地点に到達することが出来ればゲームクリアです。
ゲームクリアすると、再ゲームスタートのタップを促す表示と、ゲームクリアの演出が入ります。

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

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


学習内容


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

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



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


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

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

コメントをかく


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

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

Menu



技術/知識(実装例)

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

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

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

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

レースゲーム(抜粋)

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

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

3D脱出ゲーム(抜粋)

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

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

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

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

VideoPlayer イベント連動の実装例

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

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

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

private



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

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