Unityに関連する記事です

製作物


 上空からダイビングを行い、なるべく多くの花輪をくぐりながら着水を目指す、3Dダイビングアクションゲームを製作します。スマホで動作します。

<動画 ダイビング>

<動画 カメラ変更(3つの視点)>

<動画 着水>

システムとルール


 ゲームを開始すると、プレイヤーであるペンギンは上空から湖に向かってダイビングを行いますので、湖に浮かんでいる花輪を目掛けて上手く通過します。

 プレイヤーは常に落下しています。上下左右キー、あるいはスマホのスワイプ操作でプレイヤーを少しずつ移動させることが出来ます。

 湖までの空中には、いくつかの花輪が設置されていますので、それを上手くくぐることが出来るとスコアがアップします。
花輪の位置は変化しますので、プレイヤーを上手く操作しつつ、湖の花輪、および、空中の花輪をなるべくたくさんくぐって、湖にダイブすることがゲームの目的です。

 画面には落下しているプレイヤーと湖までの距離がリアルタイムに更新されて表示されます。(今回は右下に設置しています)

 落下中は頭を下にして「直滑降」の状態で落下をしています。この状態を続けると姿勢変更ゲージが自動的にチャージされて、満タンになると
姿勢変更ボタンを押すことによって「伏せ(手を広げてお腹から落下する)」状態になります。この状態になると落下速度が一時的に減速します。

 伏せ状態の間はチャージした姿勢変更ゲージが減少し、空になると強制的に直滑降の姿勢に戻ります。そしてまたチャージが開始されます。

 この伏せ状態がプレイヤーの操作をサポートします。タイミングよく姿勢を上手く切り替えることで、狙った花輪をくぐれるように操作を行います。

 ゲームオーバーはありません。自動的に湖に落下してゲームクリアとなりますので、ゲームクリアがゲームオーバーと同義になります。



 スカイダイビングを楽しむゲームです。スマホで気軽に遊べます。
ただ落下するだけではなく、花輪を獲得する、という道中での目的があるため、プレイヤーを上手く操作して制御に成功することによる達成感を得る楽しみがあります。

 伏せ状態になるとペンギンがバタバタして体勢を保とうとしたり、湖に着水後は、数秒後にひょこっと顔を出したりと、
アクションゲームならではの、かわいいアニメーション演出を楽しむことも出来ます。

 発展要素としましては追加のルールを考えたり、花輪の種類・大きさによって得点に変化をつけたり、アイテムを用意したりと、色々な楽しみ方を設計出来ます。


完成図


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


1.メインシーン


 今回はタイトルシーンは教材内にはありません。ゲームを実行すると、メインとなるダイビングゲームがスタートします。
必要であれば、タイトルシーンについては自分で考えて楽しいイメージの設計を行って実装をしてみてください。




<動画 メインシーン>
https://gyazo.com/9819d81627cfd98a9b4f1a12b7c14dcc


2.リザルト表示


 クリア地点である湖に着水するとゲームクリアとなります。獲得したスコアがリザルト表示されます。





<動画 クリア時のリザルト表示>
https://gyazo.com/6ff8c1eb133d567af368ab9f2395be31



3.もう一度メインシーンを開始する(ゲームサイクル化)


 リザルト表示後に、画面タップを誘導するメッセージが表示され、タップすると徐々に白い画面へとフェイドアウトし、もう一度メインシーンが開始されます。


<動画 もう一度メインシーンを開始する>
https://gyazo.com/c46a4c88c9fba62d50451a4b8da0a2fb


学習内容


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

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

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

 ・設計に沿った製作作業
 ・オブジェクトの親子関係
 ・SerializeField属性
 ・アタッチとアサインについて
 ・Header属性
 ・Input.GetAxisメソッド
 ・Tagの設定
 ・OnTriggerEnterメソッド
 ・外部のスクリプトから変数の情報を参照する
 ・Instantiateメソッド
 ・パーティクルのエフェクトが正常に再生されない場合の対処法
 ・AudioSource.PlayClipAtPointメソッド
 ・ゲームオブジェクトの形状と異なる角度を持つコライダーの作成方法
 ・enum(列挙)型の作成方法と利用方法
 ・Switch文を利用した分岐の作成方法
 ・Vector3.normalized変数
 ・Transform.eulerAngles変数
 ・Rigidbody.velocity変数
 ・Transform.parent変数
 ・アンカー設定
 ・ToStringメソッドの引数について
 ・Rigidbody.drag 変数
 ・Button.onClick.AddListenerメソッド スクリプトからボタンタップ用メソッドの登録
 ・Transform.GetChild メソッド
 ・ImageコンポーネントのImageTypeの設定を Filled に変更して利用する
 ・ボタンとゲージを連動させるためのロジックを考える
 ・Selectable.interactable プロパティ
 ・Collider.enabled 変数 
 ・transform.SetParent メソッド
 ・ShinyEffectForUGUI アセットの利用方法
 ・アニメーション関連(Animatorビュー、アニメーションのステート、トランジション、パラメータ)
 ・Animator.SetBoolメソッド
 ・プレイヤーのアクションとアニメーションとの同期処理について
 ・Post Processing −Depth of Fieldー
 ・switch 文の分岐内容に自分でコメントを書いてみる
 ・DOTweenの補間機能と実装例ァ OnCompleteメソッドー
 ・enum のキャスト処理を利用して配列の要素番号を指定する
 ・AudioSource.Playメソッド、AudioSource.Stopメソッド、AudioSource.clip 変数
 ・スクリプトを利用して1つのゲームオブジェクトに複数の役割を与える
 ・ステージ作り
 ・Mathf.Clampメソッド
 ・Rigidbodyの変数(isKinematic、drag)
 ・ゲームサイクルを生成する方法について
 ・DoTweenの使用方法について。DOFillAmount、DORotate、DOScale、DOLocalMoveなどの各メソッド、SequenceやSetEaseメソッド、SetLoopsメソッドなどの使用方法について
 ・コルーチンの使用方法について。yield return を利用した待機処理について
 ・ゲームオブジェクトの親子関係の利用方法について
 ・アセットストアからインポートしたアセットの利用方法について
 ・JoyStickを利用したスマホでの操作の実装
 ・自分でプログラムを考えてスクリプトに記述する



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

 ・Range属性
 ・if文の条件式に戻り値を持つメソッドを利用する場合の実装例
 ・Startメソッドの戻り値をvoidからIEnumerator型にして使用する処理
 ・yield return StartCoroutine()処理による待機処理
 ・GameObject 型ではなくて自作クラスでプレファブをインスタンスする方法
 ・引数に条件式を利用する方法
 ・TryGetComponent()メソッドとoutキーワード宣言
 ・DORotate メソッドの RotateMode オプション
 ・DOValue メソッド
 ・Skybox
 ・RenderSettings.skybox 変数
 ・DOTween.To メソッド
 ・自分で自動生成を考えて実装してみる



重点学習箇所

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


 多くはプレファブとしてすぐに利用できる形でゲームオブジェクトやパーティクルシステムの再生されるエフェクトを提供しています。
またGithubに公開されている無料のスクリプトがゲームの演出をサポートしてくれます。それらを上手く活用する方法を学習します。


<動画 水面のアニメーション(ゆらゆらと常時動いて、影なども水面に投影する)>
https://gyazo.com/72519f5e513f71e7bfcfd398b19ba6ff


<動画 プレイヤーのアニメーション(空中で姿勢を変えると、姿勢を保つようにバタバタする)>
https://gyazo.com/eb99c7c6aa004610ccf0c1e31bf514b9


<動画 姿勢変更ゲージが満タンにチャージされるとゲージがキランと光る>
https://gyazo.com/a541a5e04606be4643d4896dd88b0df2


2.DOTweenの使い方


 DOTweenの基本的な使用方法について学習します。

 ・姿勢変更ゲージの演出(徐々に溜まって徐々に減っていく)
 ・花輪の演出(くるくると回転している)
 ・花輪の獲得演出(花輪を通過した際に花輪がプレイヤーに集まり、最後に光のエフェクトが発生する)
 ・クリア時の演出(着水時に水しぶきのエフェクトを発生させ、水面にペンギンが顔を出す)


<動画 姿勢変更ゲージの演出(徐々に溜まって徐々に減っていく)>
https://gyazo.com/6fa5bbbac826f70695c85436494004ec


<動画 姿勢変更ボタンがゲージの状態や姿勢の状態に合わせて回転する演出>
https://gyazo.com/8b3a68d46aef11635b939af4667ee807


<動画 花輪の演出(くるくると回転している)>
https://gyazo.com/a74793738a12a6cd68f75228cb5506f9


<動画 花輪の獲得演出(花輪を通過した際に花輪がプレイヤーに集まり、最後に光のエフェクトが発生する)>
https://gyazo.com/c92432314f8d34e7d2262f500486fe1d


<動画 クリア時の演出(着水時に水しぶきのエフェクトを発生させ、水面にペンギンが顔を出す)>
https://gyazo.com/a58df36b13f4df4c83c970d0b96ae534


 このように演出を加えると画面が華やかになるとともに、一気にゲームの見た目のレベルがアップします。


3.空気抵抗による落下速度の変化演出


 Rigidbody コンポーネントの持つ drag プロパティを変更すると、ゲームオブジェクトに対する空気抵抗が変化します。
この値の変化を利用して、プレイヤーが自分で落下速度を制御しているかのように演出を行います。

 頭を地面方向に向けて直滑降の姿勢で落下している時には、空気抵抗はなしの状態にしています。


直滑降の姿勢



RigidbodyのDrag値 0



 姿勢を変更して伏せの姿勢で落下している時には、体全体に空気抵抗がかかっていると仮定して、空気抵抗の値を増加させます。
その結果、落下速度が低下します。ゲームの見た目的にも、プレイヤーが空気と接触する部分が増えたので、落下速度が下がっている、ということが伝わります。


伏せの姿勢



RigidbodyのDrag値 25



 Unityの持つ機能を上手く活用していくことで、こういったゲーム内のプレイヤーの行動に合わせた処理を実装することが出来ます。


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

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

コメントをかく


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

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

Menu



プログラムの基礎学習

コード練習

技術/知識(実装例)

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

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

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

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

レースゲーム(抜粋)

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

3D脱出ゲーム(抜粋)

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

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

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

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

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

VideoPlayer イベント連動の実装例

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

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

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

private



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

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