投稿

【GDevelop】テキストオブジェクトに追記するのはヤバいというお話

イメージ
スコアやステータスなどを表示したいときに便利なテキストオブジェクトですが、正しく利用しないと処理落ちの原因になったりするので注意が必要です。 そこで GDevelop のテキストオブジェクトに対し、どういう処理をすると負荷が高いかを実験してみました。 まず、テキストオブジェクトを 8 個用意し、次のようなイベントを実行してみます。 テキスト1 には普通に「あいうえおかきくけこ」を代入します。 テキスト2 には「あ~こ」までを 1 文字ずつ加算で追加します。 テキスト3 には大量のテキストを代入します。 テキスト4 には他とは違うフォントを設定しています。 テキスト5 にはテキスト1 と同じアクションを実行します。 テキスト6 にはテキスト1 と同じ文字数分、異なるテキストを代入します。 テキスト7 には大量のテキストを一度だけ代入します。 テキスト8 には一度だけ「あ~こ」までを 1 文字ずつ加算で追加します。 それを実行したプロファイラーの結果は、次のとおりです。 (プロファイラーの使い方や見方は、また別の記事を書きます😅) events セクション内の値を見ることで、それぞれのイベントにどれだけ時間(負荷)がかかったか分かります。 セクション名 時間(ms) % of parent % of total テキスト1 0.01ms 0.67% 0.67% テキスト2(加算で追記) 1.34ms 94.62% 73.09% テキスト3(多テキスト) 0.01ms 0.64% 0.50% テキスト4(違フォント) 0.00ms 0.11% 0.09% テキスト5(同テキスト1) 0.00ms 0.08% 0.06% テキスト6(違テキスト) 0.00ms 0.07% 0.06% テキスト7(一度・多) 0.00ms 0.03% 0.03% テキスト8(一度・加算) 0.01ms 0.59% 0.46% 注目すべき点は、加算で 1 文字ずつ追記した場合の負荷の高さです。 一度に大量のテキストを代入した場合と比べても、100 倍以上の負荷がかかっています😥 追記時に内部的にどのような処理がおこなわれているのかは知りませんが、おそらく文字数が変わるたびに、文字の形状か

GDevelop v5.0.0-beta108 がリリースされました。

イメージ
beta 106 がリリースされる前に 107 が発表されて、んじゃ 107 の記事を書くか~っと思っていたら 108 がリリースされたでござる😅 しかも、リリースに間に合うほど爆速で翻訳してくださった YU-TANG さんのおかげで、初めから新機能も日本語で利用できますぞー🙌 ということで今回は、beta 106 から 108 までの気になった変更点を、まとめてピックアップしました❗ ✨ 新機能 ・配列変数と真偽値変数が追加 全ての変数(グローバル、シーン、オブジェクト)で、従来の数値、文字列、構造体に加えて、配列と真偽値のタイプ(型)が利用できるようになりました。 真偽値は ON、OFF などに、配列は子変数の数が決まっていないデータや、増減するデータを持たせる事ができるので、とても便利です。 もちろん、配列と構造体は他のタイプを入れ子で持つことができるので、配列の子が構造体、なんてことも可能です。 特に配列は、個人的に待ち望んでいた機能なので、嬉しいです😊 ただし、現状は繰り返しイベントがシーン変数にしか対応していない点が残念です。 グローバル変数やオブジェクト変数を繰り返し処理したい場合は、シーン変数へコピーするか Javascript コードを使用する必要があります😥 ・トップダウン移動ビヘイビアを改善 「スティックコントロールをシミュレートする」アクションや「移動角度オフセット」プロパティが追加されて、より便利になったようです😆(よく分かってないw) ・オーディオに立体音響とプリロードの機能が追加 立体音響は距離による音量の減衰だけでなく、音がどの方向から鳴っているかを再現することができるようになります。(3D なので上下前後左右なのだとは思いますが、特に左右が分かりやすいです) ただし、なぜか位置を逆距離モデルという謎の割合で設定する必要があり、かなり使いにくい仕様となっています😥 Wiki の Spatial-sound ページ(英語) あと、プリロードされていないサウンドには効果がなかったり、再生前に位置を設定しようとすると落ちるバグが有るようです……😞 今後の改善に期待です。 プリロードの方は、読み込みが完了しているかを確認するすべは無いものの、使い方はアクションを追加するだけなので、簡単に利用できます。 あとアンロードもできます

【GDevelop】オブジェクト間の距離で音量を変化させる方法

イメージ
プレイヤーのキャラクターと音源との距離に合わせて、音量を変化させる方法を紹介します。 音のコントロールはページでは伝わりにくいので、まずは完成したサンプルの動画をご覧ください。 この動画では、ウサギとハチの距離に応じて、羽音の音量が変化します。 動画で使用したサンプルのシーンは、こんな感じ。 音を聞くウサギと、羽音の音源となるハチなどを配置しています。 使用素材: https://pixelfrog-assets.itch.io/ ウサギには「ドラッグ可能」ビヘイビアを追加して、ドラッグできるようにしています。 また、ウサギとハチは使用した素材が小さかったので 2 倍に拡大しています。 (プロパティのカスタムサイズで大きくしています) シーンにはその他に、デバッグ用のテキストオブジェクトも配置しています。 イベントは次の画像のようになっています。 では、一行ずつ順に説明していきます。 まず最初の行で、シーン開始時にチャンネル 1 でサウンド(羽音)をループ再生しています。 その再生アクションのパラメーターは、次の画像のとおりです。 今回のように再生するサウンドを細かく制御したい時は、チャンネルを指定できる「チャンネルでサウンドを再生する」または「チャンネルで音楽ファイルを再生する」を使用する必要があります。 チャンネル識別子を指定することで、後々そのサウンドをアクションで制御できるようになります。 (ここでいうチャンネルとは単なる識別用の番号であり、好きな数字を入れることができます) そして 2 行目のイベントで、ウサギとハチの距離に応じて、チャンネル 1 の音量を変化させています。 そのアクションのパラメーターは、次の画像のとおりです。 チャンネル識別子には、シーン開始時のアクションで指定した値の 1 を指定します。 その上で、ウサギとハチの距離に応じて 0~100 の数値を代入しています。 このアクションのポイントは、値パラメーターに入力されている何やら小難しい式です。 clamp( 100 - (Bunny.Distance(Bee) * 0.3) , 0 , 100 ) ↑と、書かれています。 (説明のため色分けしました) では、まず clamp() 関数についてです。 この関数は、ある数値を指定した範囲内に制限することができます。 次のように使います。 c

GDevelop でマウスオーバーできるボタンの作り方

イメージ
基本的なことなのに意外とボタンの作り方って情報が少ないので、私流の方法ですが作り方を紹介します第二弾。 シンプルな第一弾はこちら↓ 「 シンプルなボタンの作り方 」 PC 向け:マウスオーバーできるボタンの作り方 マウスが重なったり押している時に画像が変わる、よくある感じのボタンの作り方です。 1. スプライトを用意する ボタン用のスプライトオブジェクトを作ります。 このスプライトには、通常時の「normal」と、マウスオーバー時の「hover」、押したときの「press」というアニメーションを設定します。 2. シーンに配置する ぽいっとする。 3. イベントを組む たかだかボタン 1 つ作るだけで 4 つもイベント作らなければいけないので、まあまあ手間ですw イベントを 1 つずつ順に説明します。 1 つ目のイベントは、条件がないので毎フレーム実行されます。 ここでは、毎回ボタンのアニメーションを「normal」に戻しています。 2 つ目のイベントで、マウスカーソルが重なっているときの動作を設定しています。 条件でマウスカーソルがボタンの上にあるかをチェックして、マウスカーソルが上にある場合は、そのボタンのアニメーションを「hover」に変更します。 さらに以下のサブイベントが、そのボタンのみを対象として実行されます。 3 つ目のイベントでは、ボタンが押し込まれているときの動作を設定しています。 マウスボタン(左クリックが指定されています)が押されているかチェックして、押されているならボタンのアニメーションを「press」に変更します。 4 つ目のイベントで、ようやくクリックしたときの動作を設定します。 マウスボタン(左クリックが指定されています)が放されたかチェックして、放されたならアクションを実行します。(ここではゲームを終了する) ボタンの機能によっては、3 つ目の時点で目的のアクションを実行しても良いですが、その場合は押している間ずっと実行されないようにする工夫も、必要になるかもしれません。 たくさん作るの大変……そんな時は! 上記のタイプのボタンは押してる感があって良いのですが、ボタン 1 つにつき 4 つもイベントを作らなければならないので、たくさんのボタンが有るシーンを作りたいときは、このままではかなり面倒くさいことになります。 そんな時は、オブジ

GDevelop でシンプルなボタンの作り方

イメージ
基本的なことなのに意外とボタンの作り方って情報が少ないので、私流の方法ですが作り方を紹介します。 ここでは、クリックするとアクションするだけの、最も単純なボタンの作り方を紹介します。 もう少し手の込んだボタンが作成したい場合は「 マウスオーバーできるボタンの作り方 」をご覧ください。 1. スプライトを用意する ボタン用のオブジェクトには、主にスプライトオブジェクトかパネルスプライト(9パッチ)が利用されます。 用意できたらシーンに配置しましょう。 2. イベントを組む 「マウスボタンを放した直後」と「カーソル/タッチはオブジェクト上にある」の条件を組み合わせて、イベントを作りましょう。 ↓この条件と、 ↓この条件を使って、 ↓こんな感じにします(雑w) この例では、ボタンをクリックするとシーンの背景色が変わります。 ポイントは、マウスを押しているかチェックしてから、サブイベントでどのボタンの上にカーソルがあるかをチェックしている点です。 ↓下の画像のように個別にチェックしても機能しますが、複数のボタンがあるシーンでは、先の例に比べると無駄な処理が発生してしまいます。(同じチェックを繰り返しています) サブイベントを利用して、効率よく処理できるように組みましょう😉 おしまい!

Linux 版の GDevelop を使ってみた

イメージ
ひょんなことから Linux を使う機会があったので Linux 版の GDevelop を動かしてみました。 使用したディストリビューションは Ubuntu Desktop 20.04.2.0 LTS です。 まずはサイトから GDevelop をダウンロード。 LINUX ボタンに触れると表示される通り、ダウンロードするファイルは AppImage 形式です。 なので、Ubuntu 以外のディストリビューションでも動くはずです。 あとはダウンロードしたファイルに実行権限を付与すれば、起動できるようになります。 起動後はいつもどおりです😉 カンタン❗おしまい‼

【GDevelop】リンクオブジェクトの使い方

イメージ
リンクオブジェクト機能を使えば、あるオブジェクトから、別のオブジェクトを参照することができるようになります。 っと言われても、ナンノコッチャ🤔かと思うので、例をあげて説明します。 ※ ちなみに少しまぎらわしいのですが、「リンク」というオブジェクトがあるわけではなく、オブジェクト同士をリンクする機能のことを「リンクオブジェクト」といいます。 また、正確には「オブジェクト間をリンクできる」のではなく「異なるオブジェクトのインスタンス間をリンクできる」です。(ヤヤコシスギルワー😫) リンクしたオブジェクトにだけアクションできる 例えば、こんな事ができます。 画面下の黄色ボタンをクリックすると、リンクした船 だけ が沈みます。 ポイントは、 沈むのは全ての船ではなくリンクしている船だけ 、という点です。 これは画像に書かれているように、それぞれの黄色ボタンと船が、リンクオブジェクト機能でリンクしているからです。 このように、同じオブジェクトから作られたインスタンスが複数あっても、リンクオブジェクト機能を使えば、リンクしたインスタンスのみに絞り込んでアクションを実行することができます。 では、具体的にどのように作られているのか見てみましょう。 エディター上のシーン ↓シーンはこんな感じです。 普通(?)に海の上に船があって、下に黒帯が置いてあるだけです。 黄色ボタンが置かれていない理由は、次のイベントのところで説明します。 ボタンを生成してリンクするイベント ↓このシーンのイベントは、この様になっています。 まずシーンが始まった時に、船の下の方に黄色ボタンを生成して、船と黄色ボタンをリンクしています。 ポイントは、「船のインスタンスごとに繰り返す」を使用している点です。 繰り返しを使用しないと、最初の船とリンクしたボタンが 1 つ生成されるだけになってしまいます。 また、イベントで黄色ボタンを生成することで、リンク先の黄色ボタンを絞り込む手間を省いています。 これが、シーンエディター上でボタンを置いていなかった理由です。 もし、シーンエディター上で予めボタンを置いておく必要がある場合は、どの船とどのボタンをリンクするか絞り込んでからリンクする、というちょっと面倒くさいイベントにする必要があります。 シーンエディター上で、リンクを定義する機能があれば良いんです