知識ゼロからの超チュートリアル Vol.3

2023年9月30日土曜日

GDevelop Tutorial

X f B! P L

はじめに

今回も引き続き、これまで制作してきたプラットフォーマーアクションに手を加えていきます。


チュートリアルで使用したプロジェクトファイルを記事の最後にご用意しております。
イベントの中身を確認してテストプレイも可能ですので、ぜひダウンロードしてください。

ステップ1: 作業効率を上げる

今回はまず最初に、作業効率を上げる便利機能をご紹介します。
イベントの数が多くなってくると、どのイベントがどんな動きをするのか瞬時に把握するのが難しくなってきますので、目印とメモの役割をするコメントを挿入します。

コメントを挿入したいイベントを右クリックして、右クリックメニューを開きます。
「追加」→「コメントを追加」の順でコメントを追加します。

これでどこになんのイベントがあるのかわかりやすくなりましたね。
つぎはイベントをグループ分けして、畳んだり開いたりできるようにします。

コメントを追加したときと同様に、右クリックメニューから「イベントグループ」を追加して、グループ名を変更します。


つぎに、イベントグループの中(下)にイベントをドラッグで移動させます。

イベントグループは閉じたり開いたりできるのでイベントを整理するのに便利ですし、グループ単位で有効/無効を設定できます。
なんらかの不具合が生じた時、原因を突き止めるためにグループ単位で有効/無効にすれば絞り込みやすくなります。


イベントグループとコメントで整理しても、イベントが膨大な数に増えてきたら特定のイベントがどこにあるのか探すのも一苦労です。
そんなときに検索機能が役立ちます。

検索した文字列へ瞬時にジャンプできますし、一括で書き換えることも可能です。

不具合を調べるにはデバッガーも便利です。
「プレビュー」のドロップダウンメニューからデバッガーのタブを開きます。

「どのインスタンスがどれくらい表示されているか」
「どのイベントが負荷をかけているか」などを確認できます。
例えば、生成したのに消し忘れてどんどん増えていくインスタンスなどが一目瞭然です。

ステップ2: モバイル操作

これまではプラットフォームキャラクタービヘイビアの「デフォルトコントロール」によるキーボード操作のみでPlayerを操作していました。

こんどは、モバイル端末で操作可能にするためのオブジェクトとイベントを追加していきます。

新規オブジェクト追加で「MultiTouch Joystick」を選びます。

見た目はお好みのものをお選びください。

オブジェクト名を「Joystick」に変更し、シーンに配置したらレイヤーを「UI」に変更します。
今のままではただ置いただけなので、JoystickでPlayerを操作するためのイベントを追加します。

「Leftキーを押している」の条件がある下に「または」の条件を追加します。
副条件に新規イベントを追加します。
①「Joystick」を選択
②「Joystick pushed in a direction(4-way movement)」を選択
③「"Left"」を選択
「Leftキーを押している」の条件を「または」の副条件にドラッグで移動させます。

「Rightキーを押している」の条件も同様の手順で「または」の副条件に入れ
その下に「Joystick is pushed in direction "Left"」をコピーして貼り付けた後
「Left」の部分を「Right」に入れ替えます。

「Joystick is pushed in direction "Left"」と「Joystick is pushed in direction "Right"」の条件を、静止時にアニメーションを0に変更するイベントにコピペして条件を反転させます。

左右移動のアクションにそれぞれ「Playerの左キー押下をシミュレートする」と「Playerの右キー押下をシミュレートする」を追加します。

これでスマホの仮想ジョイスティックによる左右移動に対応しました。
つぎにジャンプボタンと攻撃ボタンを追加します。

スプライトオブジェクトを新規に追加してアニメーションをアセットストアから選びます。
「Button」で検索して「A」と書いてあるボタンを選びましょう。

オブジェクト名を「AButton」に変更して「MultiTouch Button」のビヘイビアを追加します。
ビヘイビアの設定の「Button identifier」を「A」に変更します。

「AButton」を右クリックメニューから複製して貼り付けて「BButton」にオブジェクト名を変えます。
アニメーションも「B」と書いたボタンに変更します。
「AButton」と同様に「BButton」の「Button identifier」を「B」に変更します。

「AButton」と「BButton」をシーンに配置したらレイヤーを「UI」に変更します。

配置したらイベントエディタを開いて新しいイベントを追加します。

①「AButton」を選択
②「Button pressed」
③「OK」
その下に「条件が真の時、一度だけ実行」を追加します。

アクションは「Playerの"Jump"キー押下をシュミレートする」を追加します。

「Leftキーを押している」のときと同様に「Zキーを押している」の条件の下に「または」を追加し、副条件に「Button BButton Pressed」を追加します。

これでスマホ操作が可能な仮想ジョイパッドと仮想ボタンが追加されました

今度はスマホから動作確認をします。
GDevelopを実行中のPCと同じWi-Fiに接続したスマホを用意します。

プレビューのドロップメニューから「ネットワークプレビューを起動」を選びます。

表示されたURLをスマホのブラウザに直接入力するか、表示されたQRコードを読み込んでアクセスします。
(プレイ時はブラウザを横画面に回転させましょう)

どうでしょう?
もしかしたら、右側のボタンの位置がおかしいかもしれません。
なぜなら、機種によってアスペクト比(縦横比)が違うからです。
なので、いかなるアスペクト比でもボタンの位置を固定するため、ウィンドウサイズを元にボタンの座標を変更します

「常に実行」のイベントの下に新しいイベントを追加します。
「シーンが始まった」という、ゲーム開始時に一回だけ実行される条件を追加します。

アクションで、Aボタンの座標を変更します。
X座標はウィンドウの幅から350くらいを引いてみましょう。
Y座標はウィンドウの高さから100を引いた位置にします。

Bボタンもコピペして同様に座標を変更します。
位置は環境に合わせてプレイしやすく調整してください。


再びスマホからプレビューしてみましょう。
こちらの画像は私のスマホからのプレビューです。
シーンに設定しているアスペクト比に比べると横幅が広めですが、ボタンはウィンドウ右端を基準に座標変更しているので想定した位置にきています。
(ボタンの視認性が悪いので後ほど変更して位置も微調整しています。)

ステップ3: プレイヤーアクションの追加

ステップ3ではプレイヤーアクションのバリエーションを追加していきます。
現段階では、左右の移動、ジャンプ、攻撃のみです。
そこに、二段ジャンプ、壁を掴んで登る、ジャンプスループラットフォームを降りる、はしごの昇降、上方向への攻撃を追加します。

まずは二段ジャンプからです。
すでに仮想Aボタンでジャンプするイベントがありますので
そこに「または」の条件と副条件に特定のキー押下を割り当てます。
キーはなんでも構いませんが押しやすい位置にあるキーを選びましょう。


つぎに

 Player "Jump" キー押下をシミュレートする のイベントの上に

 Playerに再ジャンプを許可する を追加するだけです。

これで空中にいる間、もう一度ジャンプできるようになりました。

ただ、このままだと空中で無限にジャンプできてしまいます。
なので、変数によって回数を制限します。

アクションで、ジャンプするたびにPlayerの変数「JumpCount」に1を加算します。

そして条件に『Playerの変数「JumpCount」は1より小さい』を追加します

ジャンプするたびに「JumpCount」が加算され、指定した値に達したときにジャンプできなくなります。
この値を2に増やせば3段ジャンプが可能になり、3に増やせば4段ジャンプが可能になります。
条件で変数の値を変えることで「アイテムやレベルアップなどによりジャンプ回数が増える」といったこともできます。

「JumpCount」を加算したらリセットするイベントも必要です。
 Player はプラットフォーム上にいる という条件と

 Player の変数 JumpCountを変更する : 0 を代入 というアクションのイベントを追加します。

こにイベントによって、着地するたびに変数「JumpCount」はリセットされます。

次は、プラットフォームの端っこにPlayerが触れたときに、つかんでジャンプできるようにします。

これはかなり簡単に実装できます。
プラットフォームビヘイビアで「つかめる端っこ」のチェックをいれてから…

プラットフォームキャラクターのビヘイビアの設定で「プラットフォームの端をつかむことができる」にチェックをいれます。

端を掴んだ時にJumpCountをリセットしないと、二段ジャンプの後で掴んだ時にジャンプで離脱できず、身動きが取れなくなります。
着地でJumpCountをリセットするイベントに「または」で「Playerはプラットフォームの端を掴んでいる」という条件を追加します。

次は「ジャンプスループラットフォームを降りる」という動作を追加します。
まずはこれまでのプラットフォームとは別の「ジャンプスループラットフォーム」を用意する必要があります。
ジャンプスループラットフォームとは、下からジャンプで通り抜けて登ることができる足場です。

これまで同様「新しいオブジェクトを追加」からタイルスプライトを追加します。

オブジェクト名を「JumpThroughPlatform」に変更してビヘイビアをプラットフォームにします。

プラットフォームのタイプをドロップメニューから「ジャンプスループラットフォーム」に変更します。

これで、下から通り抜けて上に乗ると立てる足場が完成しました。
次に、ジャンプスループラットフォームから降りるイベントを追加します。

 Player はプラットフォーム上にいる というイベントにサブイベントを追加します。

サブイベントの条件は
PlayerはJumpThroughPlatformと衝突している という条件の下に「または」の条件を追加して、副条件を以下のふたつにします。
 Down キーを押している 
 Joystick is pushed in direction "Down" 

アクションは
 Player 100 ピクセル/秒の速度で一回移動する(角度:90度) にします。

メイン:プラットフォーム上にいる
   サブ:ジャンプスループラットフォームと衝突している
             Downを押している

これらの条件が揃ったとき、Playerはジャンプスループラットフォームから降りることができます。

ジャンプスループラットフォームと同じような手順で昇降できるはしごも追加してみましょう。

ジャンプスループラットフォームの工程とほぼ同じなので図解や詳細な手順などは端折ります。
手順をざっくりと説明しますと、はしごとなるタイルスプライトのオブジェクトを追加したら、プラットフォームビヘイビアのタイプを「はしご」に変更します。
そして、はしごと衝突しているときに"UP"で昇る"Down"で降りるはしごキー押下シミュレートというイベントを追加するだけです。


ステップ3の最後は「上方向への攻撃」です。
現段階では必要のない要素ですが、次のステップで空中にいる敵を追加するので予め攻撃手段を用意しておきます。

「これまでのZキー(またはBボタン)を押している時に攻撃する」というイベントに新しい条件を加えます。

反転した条件で
UPキー(またはジョイスティックのUP)を押していないというイベントを追加します。

新規イベントで
UPキー(またはジョイスティックのUP)を押しているという条件に
Bulletを270の方向に発射するというイベントを追加します。

これで上方向に攻撃が可能になりました。

ステップ4: 敵の種類の追加

次は、空中に浮かぶ敵キャラを追加します。

まず、スポナー(発生源)となるオブジェクトをスプライトで作成します。
画像はなんでも構いませんがオブジェクト名は「Spawner」に変更します。
作成したら、複製して「Spawner1」と「Spawner2」の二種類を用意します。

次は、これまで「Enemy」と呼んでいた敵キャラを「WalkingEnemy」に名前を変更します。
そして新たに「FlyingEnemy」を追加します。

「Enemy」で検索するとそれっぽい候補が出てくるのでアニメーションを設定して経路探索ビヘイビアを追加します。

最高速度は75くらいで「オブジェクトを回転する」のチェックを外します。

この敵キャラにはプラットフォームキャラクターのビヘイビアは追加しません。
そうすれば重力に影響されず空中を自在に移動できるようになります。

Spawnerを2つに分けたのは「WalkingEnemy」と「FlyingEnemy」の発生源を別にするためです。

次に、この2つの敵キャラクターを一つのオブジェクトグループにまとめます。
①オブジェクトグループパネルを開きます。
②新しいグループを追加します
③グループ名を「Enemy」に変更します
④「︙」をクリックしてグループを編集します。


「Enemy」のオブジェクトグループに「WalkingEnemy」と「FlyingEnemy」を追加します。

イベントエディタを開いて検索パネルを開きます。
「WalkingEnemy」で検索して「Enemy」に置き換えます。
これで「WalkingEnemy」が対象だったイベントに
「Enemy」のグループ内に含まれる「FlyingEnemy」も対象に含まれました。

試しに、FlyingEnemyをシーンに配置してプレビューしてみましょう。
宙を浮くFlyingEnemyはPlayerに近づき、触れるとスタート地点からリスタートし、攻撃を当てると消滅します。

ただ、FlyingEnemyは宙を浮いて追いかけてくるので、スタート地点で触れると延々とリスタートを繰り返して身動きが取れなくなります。

なので、敵キャラに触れたらスタート地点に座標変更するリスタートから、シーンをリセットするリスタートに変更します。

今度は、敵に触れたらシーンを変更してリセットする方法にします。

それではリプレイで確認してみましょう。

今は最初にシーンに配置した敵キャラを倒すとそれ以上は登場しません。
なので、次のステップではタイマーを使用して定期的にスポナーからスポーンさせましょう。
とはいえ、無限に増殖しては収集がつかなくなるので、シーンに存在する敵キャラの数をある程度制限します。

ステップ5: タイマーと敵のスポーン

タイマーは大きくわけて2種類あります。
それはシーンタイマーとオブジェクトタイマーです。

シーンタイマーはイベントによって開始してから終了するまでタイムカウントします。
オブジェクトタイマーは、インスタンスごとにタイムをカウントします。

例えば、WalkingEnemyを5秒ごとにジャンプさせるとします。
シーンタイマーで5秒をカウント開始すれば、全員おなじタイミングで5秒後にジャンプします。
オブジェクトタイマーで、スポナーからWalkingEnemyを生成したタイミングでカウントを始めれば、インスタンスごとに生成のタイミングが違うのでジャンプのタイミングも違います。

では、実際にタイマーを使ってイベントを追加していきましょう。
WalkingEnemyを生成するスポナーのインスタンスはひとつしかないので、この場合はシーンタイマーで大丈夫です。

すでにある「シーンが始まったら」が条件のイベントにアクションを追加します。
①その他アクション
②タイマーと時間
③シーンタイマーをスタート(またはリセット)する
④タイマーの名称を「"WalkingEnemySpawn"」に設定

これで「シーンが始まったら」「シーンタイマー"WalkingEnemySpawn"を開始する」というイベントが追加されました。
これをコピーして「"FlyingEnemySpawn"」のシーンタイマーも開始させましょう。

次に新規イベントを追加します。
①その他の条件
②タイマーと時間
③シーンタイマーの値
④タイマーの名称「"WalkingEnemySpawn"」を選択
⑤「以上」を選択
⑥7を入力

これは「シーンタイマー"WalkingEnemySpawn"が7秒以上なら」という条件になります。

続いてアクションです。
①その他アクション
②オブジェクト
③オブジェクトを生成する
④生成するオブジェクト「WalkingEnemy」を選択
⑤X座標「Spawner1.X()」(スポナー1のX座標)
⑥Y座標「Spawner1.Y()」(スポナー1のY座標)
⑦レイヤー「ベースレイヤー」を選択

アクションをもう一つ追加します。
「タイマー"WalkingEnemySpawn"をスタート(またはリセット)」を「シーンが開始した」のイベントからコピーして貼り付けます。
これで、WalkingEnemyがスポーンするたびにタイマーがリセットされて再び「0」からカウントします。

このままでは、7秒おきにWalkingEnemyが無限に生成され続けるので制限を設けます。
このイベントに条件を追加しましょう。

①オブジェクト
②WalkingEnemyを選択
③シーン上のオブジェクトインスタンスの数
④「以下」を選択
⑤「5」を入力

これは「シーン上に存在するWalkingEnemyが5体以下の場合」という条件です。


これらをすべて合わせると
「シーン上に存在するWalkingEnemyが5体以下の場合、7秒ごとに」
「WalkingEnemyのインスタンスをEnemySpawner1の座標に生成し、タイマーをリセットする」というイベントになります。

これをコピーして
「FlyingEnemyのインスタンス一定数以下の場合、シーンタイマー"FlyingEnemySpawn"の値が一定数以上になったら」
「FlyingEnemyをEnemySpawner2の座標から生成し、タイマーをリセットする」というイベントも追加しましょう。

スポーンの周期やインスタンス数の上限を調整することで、ゲーム難易度を変えられます。

ステップ6: ボスキャラクターとヘルスポイント

次は、ゴール前に立ち塞がるボスキャラクターを作成します。
ボスは通常エネミーのように一撃で消えるとあっけないので、HP(ヘルスポイント/ヒットポイント)を持たせます。
さらに、一定時間ごとに攻撃もさせましょう。

まず、ボスキャラクターとなるスプライトオブジェクトを新規追加します。


ビヘイビアは「Health」と「Fire Bullets」と「Tween」の3つを追加します。

まずはHealthビヘイビアの設定から
「Starting health(life)points」(開始時のHP)を10に変更します。
「Maximum health(life)points」(最大HP)を10に変更します。
ほかはそのままで構いません。

次にFire Bulletsの設定です。
「Firing arc」(マルチファイアの場合の、弾丸の等間隔の角度)を0に変更します。
ほかはそのままで構いません。

ビヘイビアの設定が終わったら衝突マスクを編集します。
ボスを手強い相手にするために目だけを弱点にします。
それ以外の場所はPlayerの弾丸が通り過ぎます。

それではボスをシーンに配置しましょう。

そのままのサイズだと迫力が足りないので、ハンドルを掴んで大きくします。
その際、Shiftキーを押しながら広げると縦横比が維持されます。

つぎに、ボスが発射する弾丸となるスプライトオブジェクトを追加します。
名前を「BossBullet」にします。

ビヘイビアは「画面外で破棄」を選びます。
設定はそのままで構いません。

準備が整ったので、イベントを追加していきます。

まず「シーンが始まった」の条件でオブジェクトタイマーを開始します。
Bossのオブジェクトタイマー"Attack"をスタートします。

次にボスが定期的に攻撃するイベントを追加します。
「Bossのオブジェクトタイマー"Attack"の値が5以上の場合」という条件を追加します。

アクションでは、BossにBossBulletをPlayerへ向けて発射させます。

発射後にはBossのタイマー"Attack"をリセットします。

リプレイで確認すると、ボスの弾丸の発射位置に違和感があります。
それに、弾丸が小さくて迫力に欠けますので修正しましょう。

弾丸の発射位置をBossのX座標とY座標に設定しています。
なのでOriginとCenterのポイントから発射されます。

それでは、弾丸を発射させるポイントを変更しましょう。
「ポイントを追加」で「FirePoint」という名前のポイントを追加します。
そのポイントを弾丸を発射させたい位置に移動させます。
これでポイントの設定は完了です。

では、イベントも修正しましょう。
ボスが弾丸を発射するアクションを開いてください。
弾丸を発射するX座標が「Boss.X()」、弾丸を発射するY座標が「Boss.Y()」になっていますが、これを"FirePoint"に変更します。

弾丸を発射するX座標を「Boss.PointX("FirePoint")」に、弾丸を発射するY座標を「Boss.PointY("FirePoint")」に変更してください。

これで発射位置が変更されました。
続いて、弾丸のスケールを変更します。

弾丸発射アクションの下にBossBulletのスケールを変更するアクションを追加します。
3倍くらいに設定すると迫力が増します。
この大きさは難易度に影響しますので、プレイしながら調整しましょう。

プレビューで確認してみると、弾道がすこし下気味ですね。
それは、Bossの中心点からPlayerを見た場合の角度で発射されるからです。
なので、BossのCenterのポイントをFirePointと同じ場所にしましょう。

中心点を変えると、シーンに配置したBossも位置がすこし変わりますので調整してください。

今の段階ではPlayerがボスの攻撃を受けてもノーダメージです。
ですので、プレイヤーリスポーンのイベントの副条件に「PlayerはBossBulletと衝突している」を追加します。
コピペで「PlayerはBossと衝突している」も追加しましょう。

次は、Playerの攻撃でBossにダメージを与えるためのイベントを追加しましょう。

すでにある「BulletはEnemyと衝突している~」のイベントをコピペします。
「Enemy」の部分を「Boss」に変更します。
「Enemyを削除する」というアクションを削除して、代わりにボスにダメージを与えるアクションを追加します。
①Bossを選択
②Health
③「Apply damage to an object」を選択
④「Point of damage」に1を入力
⑤「Shield can reduce damage taken」いいえ
⑥「Armor can reduce damage taken」いいえ

これで、PlayerのBulletがBossに衝突するたび、ボスはダメージを受けてHealthが減ります。

ただ、今の状態ではボスのHealthが無くなってもなにも起こりません。
なので、ボスのHealthが0になったときにアクションを起こすイベントを追加します。

「Boss is dead」という条件を追加しましょう。

これは「ボスのHPが0になったら」という条件です。
アクションでボスを退場させましょう。

まず、ボスを回転させます。
回転速度は540にします。

このイベントにサブイベントを追加します。
サブイベントの条件に「真のあいだ一度だけ実行」を追加します。

アクションで2つのTweenを再生します。
1つ目は座標のTweenです。
Tween識別子:"BossExit1"
目標X座標:Boss.X()+100
目標Y座標:Boss.Y()-100
イージング:"easeOutQuad"
継続時間:2000
Tween終了時にこのオブジェクトを破棄する:いいえ

2つ目はスケールのTweenです。
Tween識別子:"BossExit2"
目標Xスケール:0
目標Yスケール:0
イージング:"easeOutQuad"
継続時間:2000
Tween終了時にこのオブジェクトを破棄する:はい
オブジェクトの中心を基準にスケールする:いいえ

これでボスのHealthがなくなったときのイベントが仕上がりました。
ただ、退場中も攻撃を続けるので攻撃イベントに条件をひとつ追加します。

「Boss is dead」の条件をコピペして反転させます。
つまり、「Boss is deadではない」ときだけ攻撃を仕掛けてくるということになります。


プレビューで確認する前に、Enemyをスポーンさせるイベントグループを無効にします。
そうすれば、Enemyに邪魔されることなくボスの動作確認に専念できます。

イベントの無効/有効の切り替えは、イベントをクリックで選択状態にして「Dキー」を押します。
無効になっているイベントは再び有効にするまで実行されませんので、不具合が起こった時に絞り込むのにも便利です。

ステップ7: 別のシーンへの移動

現段階では、ゲームを開始するとアクションパートから始まります。
なのでアクションパートとは別のスタートシーンと、ゲームクリア後のシーンを追加します。
まずはプロダクトマネージャーを開きます。

シーンを追加します。

名前を「タイトル画面」に変更したらドラッグで一番上に移動させます。
さらに、アクションパートの下に「クリア画面」というシーンも追加します。

それではタイトル画面を編集していきましょう。
タイトル画面のタブを開くとまっさらなシーンが表示されますので背景色を黒に変更します。
次にテキストオブジェクトを追加してゲームタイトルを表示させましょう。
スプライトオブジェクトでスタートボタンも作成して配置します。

名称を「StartButton」に変更し、ビヘイビアは「MultitouchButton」を追加します。


続いてイベントを編集していきます。

まず「シーンが始まった」の条件とアクションでテキストにアウトラインを加えます。

グラデーションも加えましょう。

このイベントによってテキストにアウトラインとグラデーションが加えられます。

プレビューするとタイトルロゴはこんな感じになります。

次に、プレイ環境の違いによってレイアウト崩れを防止するために、ウィンドウを基準に座標を調整します。

Vol.2で、ゲームクリアのテキストを表示するときに同じようなイベントを組みましたよね。

(SceneWindowWidth()/2)-(Title.Width()/2)
(シーンウィンドウの横幅÷2)-(Titleの横幅÷2)

(SceneWindowHeight()/2)-(Title.Height()/2)
(シーンウィンドウの高さ÷2)-(Titleの高さ÷2)

同じようにStartボタンも中央寄せしましょう。
テキストのY座標を-100、ボタンのY座標を+100にしてレイアウトを微調整します。

つぎは、ボタンを押したらアクションパートに移るイベントを追加します。
条件は「StartButtonを押して離したら」にします。

アクションは「シーンを変更:アクションパート」にします。

これで、ひとまずタイトル画面は完成しました。

つぎはクリア画面を編集しましょう。

まず、タイトル画面に戻るボタンを作成します。
ビヘイビアはさきほど同様に「MultitouchButton」です。

他の手順もほぼ同じです。

イベントもほぼ同じなのでタイトル画面のイベントをコピペして修正します。
ReturnButtonを押したときの移動先をタイトル画面にしましょう。

それでは、アクションパートのイベントエディタに戻ります。
こちらも、ゲームクリア時のシーンの移動先をクリア画面に変更します

ステップ8:グローバル変数

変数はおおまかに分けて3つあります。

■オブジェクト変数
インスタンスごとに反映される変数です。
オブジェクトのインスタンスがシーンから消えるとリセットされます。

■シーン変数
シーンごとに反映される変数です。
シーンが変わるとリセットされます。

■グローバル変数
ずっと保持される変数です。
シーンが移り変わっても値が維持されます。

今回は、グローバル変数を使ってクリア画面に獲得コイン数とプレイタイムを表示します。
まず、プロジェクトマネージャーを開いて拡張機能を追加します。

「Time」で検索して「Time formatting」を追加します。

つぎに、「TimeCount」という名称のテキストオブジェクトを追加して配置します。
「TimeCount」のレイヤーをUIに変更します。

イベントエディターを開きます。
「シーンが始まったら」のイベントに「TimeCount」のX座標を変更するアクションを追加します。

座標の値は以下に変更します。

(SceneWindowWidth()-TimeCount.Width())-50
(シーンウィンドウの幅-TimeCountの幅)-50

次にシーンタイマー"PlayTime"をスタートします。

つぎに、「常に実行」のイベントでテキストオブジェクト「TimeCount」のテキストを修正します。
数式エディターから「TimeFormatter」をの式を呼び出します。

式のパラメーターは数式エディターからシーンタイマー"PlayTime"を呼び出します。


変更するテキストは最終的にこうなります
"TIME:"+TimeFormatter::SecondsToHHMMSS000(TimerElapsedTime("PlayTime"))


ゴール時に、経過タイムとコインの獲得数をグローバル変数に格納します。
それを、ゲームクリアのシーンで呼び出します。

それでは、ゲームクリアのイベントにアクションを追加していきましょ。

グローバル変数"CoinScore"にシーン変数"Coin"を代入します。

グローバル変数"TimeScore"にシーンタイマー"PlayTime"を代入します。

これで、別のシーンに移ってもコインの獲得数とプレイ時間を呼び出せます。

シーン「クリア画面」のシーンエディタを開きます。
テキストオブジェクト「CoinScore」と「TimeScore」を追加して配置します。

イベントエディタでテキスト"CoinScore"にグローバル変数"CoinScore"を代入します。


同じようにテキスト"TimeScore"にグローバル変数"TimeScore"を代入します。



レイアウト崩れを防ぐためにウィンドウサイズを基準に座標も変更します。
テキストにグローバル変数を代入したあとに座標を変更しないと、レイアウトが崩れます。


実際にプレイしてみると、このように表示されます。

ラストステップ: 自由にアレンジしてみましょう!

ここまでご紹介したチュートリアルをご参考いただき、さらに要素を追加したり、ご自身で用意した素材に差し替えたり、アレンジを加えてオリジナリティを出してみましょう。

おわりに

「知識ゼロからの超チュートリアル」は今回でシリーズ最終回となります。
ただ、他のゲームジャンルの「超チュートリアル」シリーズを今後も続けていきたいと思います。
ご希望のジャンルがございましたらコメント欄やアンケートからご要望ください。

【アンケートはこちら】


また、「知識ゼロからの超チュートリアル」で使用したプロジェクトファイルに少し手を加えたものを配布しますので、ぜひダウンロードして中身を確認してみてください。
ファイルの改変や再配布は、使用するアセットが許可している範囲内でご自由にどうぞ。

配布ファイルに関するご質問やご意見など、お気軽にコメント欄でお寄せください。

【プロジェクトファイルのダウンロードはこちら】


ダウンロードしなくてもプレイできるようにgd.gamesでも公開していますので、ぜひご試遊くださいませ。

【gd.gamesでのゲームプレイはこちら】



最後までお読みいただきありがとうございました。

最後までお読みいただきありがとうございました😆
もしよろしければ下記のボタンから応援よろしくお願いします🙇



こちらの記事はいかがでしたか?
ぜひご評価をおねがいします🙏

プロフィール


My name is Cratier.
I'm an indie game developer.


Read more...

このブログを検索

Translate

UPDATE

最新コメント

人気の投稿

アーカイブ

リンク元ランキング

カテゴリー

アンケート



Q.クレイティアのGD覚書でお気に入りのコンテンツはどれですか?

チュートリアル
TIPS
RTA Develop
雑記
That's談
その他


Q.あなたのGDvelop使用歴はどれくらいですか?

1ヶ月未満
半年未満
1年未満
1年以上
2年以上
3年以上
4年以上
5年以上

オープンチャット

LINEアカウント

ご連絡フォーム、またはLINEから お問い合わせ、ご要望、ご指摘など、お気軽にご連絡くださいませ。

ご連絡

名前

メール *

メッセージ *

💗雑談CHAT💗
お気軽にお話しください🐹
同時接続人数:

もしよろしければ下記のボタンから応援よろしくお願いします🙇




QooQ