Unityに関連する記事です

3Dレールガンシューティングの設計を考える


 Unityのバージョンは2020.3.xf1 以降にて製作を行う前提です。
 
 ゲームのジャンルは3Dゲーム、スマホで遊ぶガンシューティングアクションゲームです。

 基礎設計が出来上がれば、あとはモデルを自由に差し替えたり(キャラ以外のものに変更)、ステージ用の背景を変えたり、
新しいルールや機能を追加していくことでオリジナルアプリとして製作することも出来ますし、最終的にはポートフォリオとして頂くことも出来ます。

 少なくても以下の内容について、詳細な設計を考えていく必要があります。

・ゲーム性(ゲームシーンとCanvasでゲームを製作する、スマホでの快適な操作、ゴールまでの目標、仕掛け作り、など)

・画面のデザイン(UIの配置、ゲームの世界観に沿ったUIのデザイン、など)

・必要なシステム・機能(タップして対象物にバレットを発射する、ゲーム画面の自動スクロール、ゲーム画面の一時停止、オブジェクトプールなど)

・演出(DoTweenによるアニメーション、画面のエフェクト、タイミングに合わせてエフェクトを作成する方法など)

・ゲームのサイクル(ゲームの流れ、追加要素を設計して実装する、ミッションの自動生成機能、ゾンビやアイテムなどの自動生成機能、など)

 それでは1つずつ設計を行っていきましょう。


・ゲーム性

1.ゲームシーンとCanvasでゲームを製作する


 3Dガンシューティングゲームですので、今回はゲームシーンとCanvasとを組み合わせて製作するようにします。

 プレイヤーは自動的に目標地点に向かって移動を行います。
目標地点までの間にはミッションの発生するポイントがあり、そちらに到達すると、移動を一時停止します。

 ミッションの発生ポイントはクラスで管理を行い、シーンビュー内に設置する設計にします。
これにより、移動する地点を確認しながら、ミッションの発生ポイントを設定することが出来るようにしています。
 
 ミッションには敵の全滅や一定時間の経過といったクリア条件が設定されており、それをクリアするとミッションが終了します。
ミッションクリアに合わせて、プレイヤーの移動を再開させます。

 この処理をベースにし、最終目標となるゴール地点まで到達することでゲームクリアとなります。

 プレイヤーの操作は面白いか、アニメーションと同期しているか、キャラクターのアクションは魅力的か、など、
アクションゲームならではのゲームの要素を考えていく必要があります。


2.スマホでの快適な操作


 スマホで遊ぶことを念頭に置き、シンプルな操作で快適に遊べるような設計を考えます。画面は横向き(Landscape)で考えます。

 1.画面をタップで画面の中央地点にバレットを発射する
 2.ARのカメラの機能を利用し、360度ゲームの世界をみることができる

 主に1・2の操作だけでゲームを遊べるようにします。
上記のような挙動でゲームが進行していくように実装手順を考えます。


3.ゴールまでの目標


 ゲームの構成は、ゲームフィールド内を自由に移動できる設計にします。この中に移動先の地点を作成して、レール移動を行います。
カメラはプレイヤーの視点を映している、いわゆる一人称視点でのカメラアングルを用います。

 自動で移動する際の移動地点を考慮したり、例えば森の中を縫うよう移動したり、水面の上を移動したりなど、移動する際にもプレイヤーを楽しませる要素を考えます。
ゲームのカメラアングルやカメラワークで感動したことがあると思いますので、そういったことを思い出しながらゴールまでの移動地点を上手く考えていきます。

 この部分は製作後に、自由に設計を改良して追加してください。


4.仕掛け作り


 ゲームは自動で進行していきます。その道中にはミッションを発生させる他、例えばアイテムを生成したり、プレイヤーが移動を楽しむための設計を考えていきます。
360度の視点の変更を上手く利用して、通常に移動しているだけでは見つけられないアイテムを配置したりして、ゴールへと到達するのが目的です。

 機能的なデザインや有効性以外にも、無駄に思える要素がゲームを楽しくするということがありますので、それを学習します。
 

 

・画面のデザイン

1.UIの配置


 Canvasを利用してUIを表示します。ゲーム中のスコア表示、プレイヤーの体力、照準、バレットの弾数表示といったゲーム中に常時するもののほか、
ゲームクリア後のリザルト表示などを制御します。


<ゲーム時> 画面の4角に表示をまとめてメインのゲームの邪魔にならないようにする


<リザルト表示時> クリア表示、リトライ用のタップを促す表示などを考える


 他にも必要な場合にはロジックも考えて設計し、画面へ追加していきます。


2.ゲームの世界観に沿ったUIのデザイン


 各画面のUIは常にゲーム中表示されていますので、そのデザインや、文字に使用するフォントの種類が見にくかったりするとユーザーは疲れてしまいます。
世界観に凝ったデザインもよいですが、見やすさ、読みやすさも一緒に考えて、バランスを保ちましょう。

 今回のゲームの世界観は、終末的な雰囲気を出すためにゾンビや銃といったものを採用しています。
そのためゲーム中に使用しているフォントもそのスタイルに沿ったフォントを採用しています。このフォントはゲーム製作に使用するアセットに含まれています。


<フォント例>

 

必要なシステム・機能

1.タップして対象物にバレットを発射する


 AR空間では、ユーザーの持つスマホがそのままゲーム画面のカメラになります。
そのため、ユーザーがスマホを操作することで360度の回転を表現出来ます。

 複数の操作を入れるとゲームシステムが煩雑になりますので、今回は画面のタップのみを採用しています。
タップした位置ではなく、タップしたかどうかを感知し、あとは、カメラの正面方向に対してバレットを発射するように設計します。

 ゲーム画面の中央部分には照準を設置しておくことで、ユーザーはそこをカメラで捉えてタップする、という操作でゲームを進めていくことが出来ます。

 こういったユーザービリティはいつも考えて設計をする必要があります。
 

2.ゲーム画面の自動スクロール


 AR 空間の特性を考えて設計しています。
AR ではカメラの位置はユーザーの位置になります。そのため、ゲーム画面内を移動しようとすると、カメラを構えたまま実際に移動を行わないとなりません。
よって自分で能動的な移動を行うことが難しいため、逆にフィールドを自動的に移動させることでゲーム内に動きを付けています
この部分とミッションの発生要素とを組み合わせてゲームとして成り立つようにしています。


3.ゲーム画面の一時停止


 ゲームが開始されると、ゲーム画面が目的地となる場所に移動を開始します。
その後、ミッションの発生するまで移動を行い、そこで一時停止を行います。こうすることにより、ミッションのクリアに集中できる設計にします。

 ミッションクリア後には再度移動を再開する必要があります。


4.オブジェクトプール


 同じゲームオブジェクトを大量で生成を行うと、当然ながらゲーム中には負荷が生じます。
そのため、同じゲームオブジェクトについては、その都度破棄はせず、一旦非表示の状態にしておいて、ゲームシーンから隠しておき、
それを適切なタイミングで再度表示させることにより、同じゲームオブジェクトをリサイクル(使いまわす)する手法を学習します。

 このような考え方をオブジェクトプールといいます。

 Unity 自体にもオブジェクトプール専用の機能が用意されていますが、今回は非常にシンプルな形での実装を学習します。


演出(エフェクト)

1.DoTweenを使用してアニメーション演出をする


 DoTween(ドットゥイーン)とは無料アセットの1つで、広く使われているTween(トゥイーン)系のアセットです。
Tweenとはゲームオブジェクトの途中経過情報を補間して表現することを言います。
例えば、Aというゲームオブジェクトが現在の地点から別の地点に移動するに際し、その移動する間の情報を補間して表現することが出来ます。
この補間表現機能を利用することにより、様々なアニメーション演出を実装出来ます。

 またDoTweenには、この機能が終了するタイミングを待って別の処理を呼ぶことや、途中で補間処理を中断したりといったことも出来ます。
Transformコンポーネントに対しての補間機能が多くありますが、それ以外にも使用方法は多岐にわたります。

 特に今回は多くの部分でこの機能を利用します。



2.画面のエフェクト


 画面をフラッシュさせたり、暗転させたりといったものだけではなく、キャラクターをアクションさせたり、画像を一瞬だけ大きくしたりなど
画面を通じて行える演出はたくさんあります。これらは場面に応じて適した内容のエフェクトを適宜いれていくことで、ゲームの臨場感や没入感が変わってきます。
 
 やりすぎず、少なすぎず、バランスを見ながら考えて実装しましょう。

 今回は要所要所でこの演出を追加しています。




3.タイミングに合わせてエフェクトを作成する方法


 今回のゲームでは無料のアセットのエフェクトをいくつか利用し、生成のタイミングや制御の方法などを学習します。
 
 プレイヤーがバレットを発射すると、画面の手前に発射したエフェクトを生成する
   ↓
 発射したバレットが敵にぶつかるとヒットした部分にエフェクトを生成する
   ↓
 ヘッドショットした場合には、敵の頭部にエフェクトが発生する

 このように演出を設計し、その順番通りに動くように制御を行っていきます。


ゲームのサイクル

1.ゲームの流れ

 
 何回も繰り返し遊んでもらうような設計になっているため、明確なエンディング、またゲームオーバーはありません。
ゲームクリアになったら、またタイトルに戻ってゲームを最初から遊べるようなサイクルを作成します。


2.追加要素を設計して実装する


 ベーシックなゲーム内容とゲームサイクルになっているため、ここには様々な要素を追加することが出来ます。

 例えば、ステージクリア制、アイテム要素の追加、障害物要素の追加、敵の種類によるスコアの変動など、
システム面の機能だけでもかなりの追加要素が考えられます。

 それらの設計を行い、自分で考えた機能を実装してみましょう。


3.ミッションの自動生成機能、ゾンビやアイテムなどの自動生成機能

 
 ミッションは事前にデータベースとして登録を行っておいて、そのデータをゲーム内に反映させる設計にします。

 ミッションの情報として、どのような敵が生成されるのか、どの地点に生成されるのか、といった情報を登録しておきます。
このようにすることで、同じプログラムであっても、生成されるゾンビの位置を、各ミッションのデータに応じて自動的に切り替えることが出来ます。

<プログラムは同じでもデータベースで内容を自動的に分岐させる>
 ・自動的に移動する
    ↓
 ・ミッションの発生地点に到着する
    ↓
 ・ミッションのデータをデータベースから取得して、そのデータを使ってミッションを発生・実行する
    ↓
 ・ミッションをクリアしたら移動を再開する

 このサイクルのみでゲームのプログラムは動いています。例えるなら、ミッションのデータがゲームソフトであり、それを読み込んで実行するゲーム機器がプログラムです。
ミッションのデータが毎回異なるため、ゲーム画面では違うミッションが実行されて、そのミッションに応じた敵が指定された位置から生成されるようになっています。
こういったデータベースの機能や、プログラムの自動サイクル化による設計方法、それをゲーム内に活用していく方法を学習します。

 多くのゲームはこういったパターンで、自動化されたサイクルをロジックとして組み込んで動いているという、イメージをつかんでください。
プログラムはそれを可能にするための手段です。それを作成するのがプログラマーのエンジニアとしての仕事・役割になります。


 設計の項目については、以上になります。詳細については実装する際の手順内にて説明を補記していきます。
また、これら以外にも用意するべきものがあるのであれば、それらも考えておきましょう。



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

 => 次は 実装手順を考える です。

コメントをかく


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

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

Menu



技術/知識(実装例)

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

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

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

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

レースゲーム(抜粋)

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

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

3D脱出ゲーム(抜粋)

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

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

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

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

VideoPlayer イベント連動の実装例

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

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

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

private



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

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