Unityに関連する記事です

製作物の概要


 3Dで表現されたゲーム世界において、アイテム(宝石)を集めることが目的のアクションゲームを製作します。スマホで動作するため、気軽に楽しめます。
集めるアイテムは任意に変更できます。例えば、ゴミを集めるのであればゴミ拾いゲームになります。

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



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

 プレイヤーのアクションは移動とジャンプのみです。
発展編では、アイテムを吸引するアクション(ルイージマンションのようなイメージ)の実装にチャレンジします。









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

 ・Universal Render Pipeline(URP)
 ・Cinemachine
 ・InputSystem
 ・PostProcessing
 ・NavMeshAgent
 ・Lighging
 ・プレファブ・バリアント
 ・ProBuilder
 ・DOTween


<動画 NavMesh を利用した、プレイヤーの移動範囲の制限>


<Game ビュー 実装動画>
動画ファイルへのリンク


<Scene ビュー 実装動画>
動画ファイルへのリンク


<動画 カメラのシームレスな切り替え>

<動画 アイテムの吸引>



システムとルール


 このゲームを製作するためには、最初に3Dの世界を構築します。
そのため、その世界観がそのままゲームの舞台になります。(そのため自由にデザイン変更できます)
ファンタジー風、現代風など、自分のイメージしている世界をステージとして作成します。

 プレイヤーの移動は左右と前後になります。一般的な3Dアクションゲームと同じ内容です。

 プレイヤーは3人称視点であり、カメラは自動でプレイヤーの追従移動を行います。
ボタンを押すことで、3種類の視点をシームレスに切り替えることができます。自由に回転させる機能は実装しません。



 ゲーム内では一定時間おきにアイテム(宝石)がランダムな位置に自動生成されます。
単純にランダムにしてしまうと取れない場所やステージ外に生成されてしまうため、プレイヤーの移動範囲に限ってランダムな位置に生成を行います。

 プレイヤーはアイテムに侵入することで獲得し、ポイントが加算されます。アイテムには種類があり、獲得時のポイントが異なります。

 ゲームの目的は、制限時間内にたくさんのアイテムを集めて、より多くのポイントを稼ぐことです。
これだけだと、ゲーム内にメリハリが生まれないため、障害物を用意して、アイテム収集の邪魔をさせます。

 ゲーム内の時間が 0 になったらゲームクリア(終了)となります。

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

 例えば、発展編においては、このアイテムを集める部分とゲームの世界とを紐づけることで、ゲームシステムを構築します。
具体的には、モノクロになっている世界で、アイテムを集めていくことで、徐々に世界に色を取り戻していく、というゲームに作り変えたり、などです。



 基礎編においては、プレイヤーには体力(Hp)の要素はありません。
その代わり、障害物に接触したりした際には、制限時間が減少したり、獲得したアイテムを失ってポイントが減少したりと
体力ではなく、別の形でのペナルティを受けるようにしています。



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

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

完成図


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


1.ゲームの流れ


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



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

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


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

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



 ステージには敵やアイテムを配置しておき、最初から見えているものもあれば、時間の経過や、特定の位置に侵入することで出現するものもあります。

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

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


学習内容


 3D宝石集めゲームを製作していくことで、習得することを目標とする技術を記載しておきます。

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

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



 ・設計に沿った製作作業
 ・アセットストアからインポートしたアセットの利用方法について
 ・fbx ファイルの ImportSettings 内の Scale Factor を利用したモデルサイズの調整方法
 ・RequireComponent(typeof(クラス名/コンポーネント名))]属性
 ・SerializeField 属性
 ・TryGetComponent メソッドと out キーワード宣言
 ・Input.GetAxis メソッド
 ・FixedUpdate メソッド
 ・Rigidbody.velocity 変数と velocity 変数を利用した移動
 ・Summary(サマリー)機能
 ・Rigidbody.velocity.normalized 変数
 ・Vector3.zero 変数
 ・Quaternion.LookRotation メソッド
 ・学習のための工夫
 ・Cinemachineの導入
 ・Virtual Cameraの実装方法(配置・設定)
 ・NavMesh の説明
 ・NavMesh の作成(Bake)
 ・NavMeshAgent の応用
 ・Animator 関連の機能と設定
 ・Animator.SetFloat() メソッド
 ・enum の列挙子と機能
 ・enum の列挙子のキャスト処理
 ・Component.CompareTag メソッド
 ・Collider.OnTriggerEnter メソッド
 ・Tag の設定
 ・エラー対応方法
 ・TryGetComponent()メソッドとoutキーワード宣言
 ・メンバ変数に用意していない型への処理を実行していく方法
 ・Canvas の設定
 ・CanvasRenderer コンポーネントの Cull Transparent Mesh 機能
 ・Raycast Target 機能
 ・Canvas 内のオブジェクトのアンカー設定
 ・インスペクターのアサイン情報の読み方
 ・スクリプト内で別のスクリプトの処理を実行していく方法(復習)
 ・プレハブバリアント
 ・メソッドの活用方法
 ・Instantiate メソッド  欅数の種類と内容−
 ・プレハブを利用したゲームオブジェクトの自動生成機能
 ・空のゲームオブジェクトの活用例
 ・配列
 ・while 文とコルーチンメソッドを利用したループ処理
 ・NavMesh.SamplePosition() メソッド
 ・DOTween



 発展編として、以下の技術についても学習します。(記事作成後、追加します)

 ・プロパティ
 ・Universal Render Pipeline(URP)
 ・InputSystem
 ・PostProcessing
 ・Lighging
 ・ProBuilder


重点学習箇所

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


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

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

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


GameStart のロゴの例



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



2.DOTweenの使い方


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


3.NavMeshAgent の活用


 Unity には AI 機能として NavMeshAgent という経路検索機能が搭載されています。
こちらを活用することで、敵の移動する際の経路を自動化できます。

 またこの機能はプレイヤー側にも利用することができ、コライダーを利用せずに移動範囲の制限を行うことも出来ます。

 このように、1つの機能であっても活用方法が複数あることを学習して、多角的な視点を身につけるようにします。


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

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



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

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

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

コメントをかく


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

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

Menu



プログラムの基礎学習

コード練習

技術/知識(実装例)

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

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

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

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

レースゲーム(抜粋)

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

3D脱出ゲーム(抜粋)

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

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

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

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

3Dトップビューアクション(白猫風)

VideoPlayer イベント連動の実装例

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

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

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

private



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

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