Unityに関連する記事です

製作物の概要


 タップのみで遊べる放置ゲームの製作を行います。スマホで動作するため、気軽に楽しめます。



 画面内にある「行き先」をタップすると、その地点に対してキャラが「お使い」に出かけます。
 そのため遊び方としては、「お使い」を実行したら、あとは、時間が経過するのを待ちます。
ゲームを起動したままでもよいですし、アプリを閉じて待機しても構いません。

ゲーム画面 々圓先の選択



ゲーム画面◆々圓先の確認



 「お使い」は自動で進行し、現実の時間の経過によってゲーム画面に「お使い中の反応」が表示されるようになります。

ゲーム画面 お使い中(放置可能)



 設定されている「お使い」の時間が経過すると、キャラの表示が変化し、「お使いが終了」したことを知らせてくれます。

ゲーム画面ぁ,使い終了


 この状態でキャラをタップすることで、「お使いによる褒賞」を獲得することが出来ます。

ゲーム画面ァ,使いの報告 褒賞獲得



 この繰り返しで遊ぶゲームになります。

 このゲームの素材にはイラストボックス様の素材を利用させていただいております。
イラストボックス様
https://www.illust-box.jp/


<動画 々埓茲魴萃蠅靴討使いを実行する>

<動画◆〇間の経過に伴い、お使い終了>

<動画 お使いの褒賞獲得>

<動画ぁヽ容世靴針賞一覧を表示するアルバムポップアップ>

システムとルール


 汎用的な2Dの放置型ゲームを製作するための教材になっています。
そのため実装しているのはシステム面のみで、以下以外の詳細なルールはありません。

<実装するシステム>
 ・画面のタップによる制御
 ・現実の時間の経過をゲーム内に反映する機能
 ・時間の経過を利用した放置システムの制御
 ・設定された時間経過後にイベントを発生させる機能
 ・褒賞の内容を、希少度をベースに、同希少度内でランダムに抽選して提供する機能
 ・獲得した褒賞の一覧をアルバム表示する機能
 ・獲得した褒賞に応じてゲーム内容を拡張していく機能

 以上の部分における、ロジックの考え方や、実装の方法などを学習します。
簡単に解説しておきます。


<画面のタップによる制御>


 上記の動画を確認していただくとわかるように、ベースはすべて画面のタップにて進行していくデザインになっています。

 そのため、画面内の特定の部分をタップすると反応する機能と、この機能を利用してゲームが進んでいくという処理を組み立てていく必要があります。


<現実の時間の経過をゲーム内に反映する機能>


 DateTime クラスの情報を利用して、実際の時間をゲーム内で保存し、そのデータを利用する機能を実装します。


<時間の経過を利用した放置システムの制御>


 放置ゲームですので、お使いに出かけている時間を、ゲームが実行していない間にも判定できるように機能を考える必要があります。

 今回はゲームを終了した時間、お使いを開始した時間とお使いの残り時間、ゲームを再開した時間といった各タイミングに応じて現在の時間を保存する機能を実装し、
保存している時間同士の差分値を取得することで経過時間を取得します。この経過時間を利用することで、放置している時間をお使いに出かけている時間として振る舞うように設計しています。


<設定された時間経過後にイベントを発生させる機能>


 上記の応用です。指定されている時間が経過後には、お使いを終了するというイベントを発生させる機能を追加し、制御します。


<褒賞の内容を、希少度をベースに、同希少度内でランダムに抽選して提供する機能>


 お使いが終了すると、その成果物として褒賞が獲得できるようにします。
褒賞には希少度(レアリティ)を設定し、同じ希少度内に複数の褒賞を用意することで、その希少度内でランダムな褒賞を抽選して提供する制御機能を実装します。


<獲得した褒賞の一覧をアルバム表示する機能>


 ゲームを繰り返し遊ぶことを前提としているため、お使いによって獲得した褒賞を一覧で表示するアルバム機能を実装し、ユーザーが遊んだ成果を見れる状態にします。


<獲得した褒賞に応じてゲーム内容を拡張していく機能>


 画面をタップできる場所や褒賞にはそれぞれに異なる設定値を用意することで、例えば、希少度の高い褒賞が獲得しやすいが、お使いの時間のかかる場所、といった
ゲームをより面白くする仕掛けを実装することが出来るようになります。ユーザーにジレンマや、自分なりの遊び方を考えてもらう余地を与えることが大切な要素になります。



 発展編ではこのシステムをベースに、どのようなゲームにするのかを考えて肉付けしていきます。
ステージが変わったり、キャラを増やしたり、色々な楽しみ方を設計していってください。
 

完成図


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


学習内容


 スマホ向けの2D放置ゲームを製作していくことで、習得することを目標とする技術を記載しておきます。

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

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

 ・設計に沿った製作作業
 ・アセットストアからインポートしたアセットの利用方法について
 ・Canvas のみでゲームシーンを製作する方法
 ・Raycast Target 機能
 ・CanvasRenderer コンポーネントの Cull Transparent Mesh 機能
 ・サマリー機能
 ・TODO 機能
 ・Button.onClick.AddListenerメソッド
 ・SerializeField 属性
 ・Debug.Log メソッドの活用
 ・メソッド・チェーン
 ・DOTweenの補間機能と実装例  DOPunchScale メソッド、SetEase メソッドー
 ・ポップアップを自分で作成する
 ・処理にコメントを記述する
 ・CanvasGroup コンポーネント
 ・Selectable.interactable 変数
 ・DOTweenの補間機能と実装例◆ DOFade メソッド、OnComplete メソッド メソッドー
 ・enum だけのスクリプト・ファイルの作成
 ・MonoBehaviour クラスを継承していないクラスの作成
 ・enum の列挙子と機能
 ・[System.Serializable(シリアライザブル)]属性
 ・Tooptip 属性
 ・ToString メソッド
 ・Instantiate メソッドの戻り値
 ・プロパティ
 ・DOTweenの補間機能と実装例 ーDOPunchPosition メソッド、SetLoops メソッドー
 ・Tween.Kill メソッド
 ・static クラスと static メソッド
 ・PlayerPrefs クラスと各メソッド ーSet〜 メソッド、Save メソッド、HasKey メソッド、Get〜 メソッドー
 ・JsonUtility クラス
 ・型引数とジェネリック型
 ・シングルトンデザインパターンによるクラスの作成
 ・DontDestroyOnLoad メソッド
 ・const 修飾子
 ・DateTime 構造体と DateTime.Now プロパティ
 ・DateTime.ParseExact メソッド
 ・MonoBehaviour.OnApplicationQuit メソッド
 ・Math.Round メソッドと MidpointRounding 列挙(enum)型
 ・TimeSpan 構造体と TimeSpan.TotalSeconds プロパティ
 ・List の使い方  疾觚澄⊇藉化、Count プロパティー
 ・リファクタリング
 ・クラス内に別のクラスを作成する(入れ子クラス)
 ・List の使い方◆ Find メソッド、Exists メソッド、Add メソッドー
 ・new 演算子によるインスタンスの作成とオブジェクト初期化子
 ・問題点の切り分けと細分化 ー自分で処理を書くことに挑戦する。いま書ける処理とイメージがわかなくて書けない処理とに問題点を切り分けるようにしていくー
 ・タプル型の実装例
 ・処理の組み立て方を考える
 ・enum だけのスクリプト・ファイルの作成
 ・スクリプタブル・オブジェクトの作成とデータの登録
 ・スクリプタブル・オブジェクトをゲーム内で利用できるようにする方法
 ・Linqの機能の実装例  Where メソッド、ToList メソッド、Sum メソッド、Select メソッド、ToArray メソッド〜
 ・実装パターンの応用 ー同じ処理を異なる方法で実行するー
 ・シングルトンデザインパターンによるクラスの活用
 ・セーブ実行を確認するための Debug.Log メソッドの処理を、自分で考えて実装する
 ・TODO を参考にしながら自分で処理のロジックを考えてスクリプトを書いてみる
 ・DOTweenの補間機能と実装例ぁ Sequence処理、DOScaleメソッド、DOLocalMoveメソッド、DOMove メソッドー
 ・スクリプトの引数を利用して、1つのゲームオブジェクトの振る舞いを変えて、異なる役割を与える方法
 ・開発環境作りの考え方と実装
 ・いままで総まとめ
 ・Start メソッドと Update メソッドの利用方法を考える
 ・Start メソッドに依存しない設計



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

 ・実装内容による

 ・引数と戻り値を使った処理の実装例
 ・引数を利用して処理の振る舞いを変更する実装例
 ・引数を利用して外部のクラスの情報をスクリプト内に取得する方法の実装例
 ・Canvas 内にゲームオブジェクトを自分で考えて配置する
 ・プレファブの解除(アンパック)方法
 ・入れ子クラスの情報を参照する方法
 ・複数のスクリプトを経由する処理を読み解く



重点学習箇所

1.現実の時間の経過をゲーム内に反映する


 放置ゲームですので、お使いに出かけている時間を、ゲームが実行していない間にも判定できるように機能を考える必要があります。

 今回はゲームを終了した時間、お使いを開始した時間とお使いの残り時間、ゲームを再開した時間といった
各タイミングに応じて現在の時間を保存し、その差分値を取得することで放置している時間もお使いに出かけている時間として振る舞うように設計しています。


2.DOTweenの使い方


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

 ・画面をタップした際にアイコンをアニメ演出する
 ・お使い中のアイコンをアニメ演出する
 ・アルバムポップアップの表示/非表示をアニメ演出する


<動画 _萍未鬟織奪廚靴榛櫃縫▲ぅ灰鵑鬟▲縫甕藹个垢襦
動画ファイルへのリンク


<動画◆,使い中のアイコンをアニメ演出する>

<動画 アルバムポップアップの表示/非表示をアニメ演出する>

動画ファイルへのリンク

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


3.データベースを活用し、1つのプレファブから、異なる内容の同種類のゲームオブジェクトを作成する


 お使いの褒賞や、お使いの内容をゲーム画面に表示する際に、複数のの異なるゲームオブジェクトやプレファブを作成するのではなく、
予め専用のデータベースを作成して褒賞の情報やお使いの内容を登録しておくようにし、そのデータを読み込むようなロジックの設計を学習します。

 この機能を利用することにより、1つのプレファブから、用意してあるデータを反映して、それぞれが別の内容になるよう、異なるゲームオブジェクトとして振る舞わせています


4.スクリプタブル・オブジェクトの活用


 Unity にはスクリプタブル・オブジェクトという、データベースを作成して利用する機能があります。
今回のゲームは、この機能を活用することによって、【3】のプレファブの振る舞いを変更する処理を実行しています。

 スクリプタブル・オブジェクトの内容はインスペクターから変更が可能ですので、保全管理することも容易になっています。



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


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

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

コメントをかく


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

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

Menu



プログラムの基礎学習

コード練習

技術/知識(実装例)

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

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

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

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

レースゲーム(抜粋)

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

3D脱出ゲーム(抜粋)

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

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

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

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

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

VideoPlayer イベント連動の実装例

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

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

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

private



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

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