ベクトルとTime.DeltaTimeを用いたコイン獲得時のアニメーション演出処理の作成 | Unity入門の森 ゲームの作り方

ベクトルとTime.DeltaTimeを用いたコイン獲得時のアニメーション演出処理の作成

Unity 放置インフレ系クリッカーゲームの作り方 (スマホ化対応)


Unity入門の森オリジナル本格ゲーム制作講座はこちら
11種類の本格ゲームの全ソースコード公開・画像&動画による解説付き

前回はShopオブジェクトの作成と、羊パラメータの増産をして、一通り遊べる状態にできました。

前回の記事↓

羊を購入できるお店スクリプトの作成とGrid Layout Groupを用いたUI画面整形
前回は、SheepButtonを作成して、羊購入処理等を作りました。 前回の記事↓ 今回はそのSheepButtonを複数並べるためのShopオブジェクトを実装していき、一通りクリッカーゲームとして遊べる状態を目指していきます。 Shopオ...

今回はコイン取得演出の追加と、セーブ・ロードを追加して一通りの完成を目指します。


【Line登録者限定のプレゼントもあるよ!】

コイン取得演出の追加

今は売却ボタンを押すと即座に所持金に加算されています。

もちろんこれでも問題はないのですが、所持金の表示が一番上で視界に入りづらい事もあり、若干「増えている感」が薄いという欠点があります。

そのため、あくまでも演出ですが、「コインが所持金TEXTのところまで飛んでいき、金額が増える」ようにします(よく見るやつですね)

コインオブジェクトの作成

では Assets/Images フォルダ内の coin をSceneにドラッグアンドドロップして、coinオブジェクトを作成してください。
作成されたcoinオブジェクトにはCoinスクリプトを新規で追加します。

Coinオブジェクト

  • WalletTextの所へ飛んでいく(できれば最初速く、後半遅く)
  • WalletTextまで到着したら、所持金に金額を加算

としたいので、まずメンバ変数として

  • 加算する金額
  • Walletオブジェクト

を宣言しておきます。(これらは、後ほどWoolスクリプトからセットするように修正します。)

次にUpdateメソッドの中をこのように修正します。

コメントにも書いてありますが、ベクトルを求めていますね。

ベクトルの計算については

【敵の移動処理の作成2】目的地の設定とベクトルを用いた経路設計
前回(第4回)では、敵の経路を作成しました。 前回の記事↓ 第5回である今回は、その経路に沿って実際に敵オブジェクトが移動する仕組みなどを作っていきます。 どんどんタワーディフェンスらしくなってきますね。 敵(Enemy)スクリプトの修正 ...

でも少し触れていますが、ある地点(From)から、ある地点(To)移動するベクトルを求めるには、

var v = To – From;

2つのベクトルの引き算をしてあげればよいので

var v = wallet.transform.position - transform.position;

と、ローカル変数v今の場所からWalletオブジェクトへ移動するベクトルvを求めています。

これを、直接 transform.position += v; とすると、coinオブジェクトの位置はWalletオブジェクトまで一瞬にして移動してしまいます。

そこで、Time.deltaTime を使います。 Time.deltaTimeには「前回フレームから今回フレームまでの秒数」が入っているので、

transform.position += v * Time.deltaTime;

とすることで、「1秒間で目的地(Walletオブジェクト)にたどり着く速度で移動」という意味になります。

ただ、それだと遅すぎるのと、毎フレームローカル変数vが再計算されるので、目的地に近づくにつれて移動ベクトルvが短くなってしまい、1秒経っても辿り着かないほどの速度になってしまいます。

そのため、ある程度の速度までかさ上げをしてあげるため、適当な数値(今回は20倍にしました)をかけてあげたので

transform.position += v * Time.deltaTime * 20;

となっています。

こうして移動した後、ある程度まで近づいたら所持金を増やしたいので

v.magnitudeでベクトルの長さ=このcoinオブジェクトからWalletオブジェクトまでの距離を求めています。 ある程度より小さくなったら到着したとしたいので if文で0.5fより小さいかどうかで判断しています。( if(v.magnitude < 0.5f) )

到着していたら所持金を増やし( wallet.money += money; )

自分自身を削除しています。( Destroy(gameObject); )

ではスクリプトは保存し、UnityEditor上で、coinオブジェクトAssets/Prefabs にドラッグアンドドロップしてプレファブ化し、Scene上のcoinオブジェクトは消してしまいます

Woolスクリプト修正

次にWoolスクリプトを修正します。今のWoolスクリプトはこのようになっています。

22行目で売却処理が呼ばれたら直接walletのmoneyを増やしていますが、この箇所をcoinオブジェクトを作るように修正をしたいです。

そのために、まずcoinプレファブをInspectorでセット出来るようにメンバ変数を用意します。

次に、売却処理 Sellメソッドも以下のように修正します。

coinプレファブを複製(Instantiate)してローカル変数 coin に格納し、金額(value)と所持金オブジェクト(wallet)をそれぞれセットするようにしてあげています。

なおInstantiateメソッドに transform.positiontransform.rotateion を渡すことで、woolの位置、回転状態でcoinオブジェクトを作るようにしています。

修正したWoolスクリプト全体はこのようになります。

続きを読む

このコンテンツはパスワードで保護されています。 コンテンツを読みたい方はUnity入門の森ショップ(https://unityforest.shop/)で講座閲覧権を取得してね。

おさらいと次回予告

今回はコイン取得演出を追加しました。

ここまででゲームのメインシステムは出来上がりです。

が、まだインフレ系クリッカーゲームに必須のセーブ・ロードシステムができていません。

次回はセーブ・ロードシステムやインターフェース機能を用いたデバッグシステムの実装を行います。

PlayerPrefsを用いたセーブ・ロード処理とインターフェースを使ったデバッグシステムの開発
前回でコイン獲得時のアニメーション処理を作り、ゲームのメイン処理ができあがりました。 前回の記事↓ ですが、インフレ系クリッカーゲームは一度のプレイで完結しないため、セーブシステムが欠かせません。 ここでは、PlayerPrefsやインター...

 



Unity入門の森オリジナル本格ゲーム制作講座はこちら
11種類の本格ゲームの全ソースコード公開・画像&動画による解説付き

コメント

タイトルとURLをコピーしました