検索
ハートフルRPG「地図の時間」

地図の時間スピンオフRPG「影泥棒と魔法の手記」

リソース管理ダンジョンRPG「琥珀の道具士」

現代SFRPG「重力ルーペ/探求リバーブ」

ドラマティックRPG「バンドワゴン」

ビジュアルノベル「日向と香水」

ノベル×ADV「ストーリーテラー」 title1_2.png
カテゴリ
リンク集
【スポンサードリンク】

【ゲーム】




【創作】






シナリオ制作


設定作り


最近読んでよかった本五選





創作意欲を掻き立てる本


自己管理術


クリエイター向けノウハウ

2020年04月08日

【RPGツクール】処理名でプラグイン一式を横断的に検索する方法

処理名でプラグイン一式を横断的に検索する方法


VSCodeでファイル→フォルダを開く→pluginsフォルダを指定。
左上の検索バーで検討を付けていた処理名で検索すると、プラグイン一式を横断的に検索できます。

20200408_1.jpg


処理名の傾向には2種類あります。
両方を触れておくことで、探すときの助けになり、理解にも繋がると思います。

@コード全般で使われる命名
参考:Naming -名前付け-
https://qiita.com/Koki_jp/items/f3d3e824f98d182d4100

ARPGツクール特有の命名
参考:RPGMakerMV Library
https://kinoar.github.io/rmmv-doc-web/

DB編集はサクラエディタのGrep検索/置換
プラグインの競合確認にはVSCodeを使ったコード検索と使い分けると良いですね。

参考:
サクラエディタのGrep検索機能を活用したテキストの修正テクニック
http://fanblogs.jp/tabirpglab/archive/1213/0

2020年03月01日

Googleアナリティクスプラグイン「Wataridori_GoogleAnalytics.js」解説

Googleアナリティクスプラグイン「Wataridori_GoogleAnalytics.js」解説


プラグイン「Wataridori_GoogleAnalytics.js」の解説記事です。
Googleアナリティクスプラグインの使い方、導入方法、注意点まとめています。
Googleアナリティクス(GA)側の簡単な導入部分も整理しているので、興味のある方の参考になれば。

【プラグイン配布】Googleアナリティクスプラグイン【RPGツクールMV】
制作者:飯尾隼人様
https://ci-en.dlsite.com/creator/2449/article/215213
スペシャルサンクス:BIT/O様

まずは作者様に御礼申し上げます。

Googleアナリティクスとは

WEBサイトのデータ分析ツールです。
大雑把に言うと「どこに顧客がいて、どこに注力すると効果的か」などを調べるのに使われます。

余談:
Googleアナリティクスアカデミー(英語、字幕あり)で説明されているので、興味ある方はご覧ください。

ツクール作品においては、「WEBサイト=ゲームデータ」「ページ=マップ」と置き換えて、分析に活用できます。

★ゲーム作者さん以外の方に向けて補足

・メールアドレスや電話番号は取得されません
・個人特定もできません(東京大田区にヘビーユーザーさんがいるな、ありがたいな、程度です)
・通信量が大きく増えることもありません
本件でテストした限りでは1回のマップ移動あたり102バイト
WEB広告の300×250のバナーやサムネイルが100KBだとして、その1/1000程度のサイズです
この処理でローディングが増えることもありません

作者がフルにこの情報を活かせば、パラメーター周りのゲームバランスの改善が期待できる恩恵があります
私がこのページを書いている理由は両者にとってプラスだと思っているからです

Googleアナリティクスプラグインが向いている人

・1作品に対して長期間メンテナンス/サポート対応ができる人
真面目にやると、データ取得範囲を決め、データをチェックして、仮説を立て、改善、チェック(以後繰り返す)ような作業が続きます。
単にアクセス数を採るつもりなら、DL数やプレイ数を見るのと変わりません。
GDPR、通信トラフィック、パフォーマンスへの説明など、考慮することも少なくありません。

必要なもの

・Googleアナリティクスアカウント(Googleアカウントから取得可能。Gmail持ちなら5分)
・ツクールMVの公開作品

金銭コストはかかりません。
労力はかかります。

実践編

Googleアナリティクスの準備


1)Googleアナリティクスアカウントを作成する
GMailアドレスがあればアカウントにログインした状態で所要時間5分程度。

https://analytics.google.com/analytics/web/

2)アカウント→プロパティを作る
プロパティ=WEBサイトです。
今回はWEBサイトがRPGツクールの作品に置き換わると考えてください。

2-1)Googleアナリティクス左ペインの管理→アカウント→プロパティ→プロパティを作成
GA02229_1.jpg

2-2)プロパティの作成で「ウェブ」を選択
Apps、アプリとウェブはiOS/Androidアプリ用向け。本プラグインを活用する分にはウェブで網羅できると考えます。
(訂正、意見歓迎します)

2-3)
ウェブサイトの名前:作品名(変更可能)
ウェブサイトのURL:実在する自己管理が利く任意のURL(変更可能かつ、プロパティの区別なのでこだわる必要なし)
業種:私はアート/エンターテイメントにしました(Google広告と連携する際に影響してたような。連携しない分には影響なし)
レポートのタイムゾーン:日本(レポートを見る際の時間。アメリカの顧客が多数を占める場合は、UTCにして分析した方がいいでしょう)
GA02229_2.jpg


2-4)
登録が終わったら
左下の「管理」→アカウント→プロパティ→トラッキング情報→トラッキングコードの画面を表示させておきます。
GA02229_3.jpg

ツクールMVプロジェクトの設定


3)プラグインの設定
プラグインを有効化し、プラグインのパラメーターを設定します。

詳細はこちらをご覧ください。
https://ci-en.dlsite.com/creator/2449/article/215213

・TrackingID(必須)
Googleアナリティクス左ペインの管理→アカウント→プロパティ→トラッキング情報→トラッキングコードの文字列を入れます。
UA-XXXXXXXXX-Xのような値
GA02229_4.jpg

本記事を読み進めながらテストするだけなら、残りは規定のままで大丈夫です。

4)プロジェクトの設定
3)の設定だけで、以下のことがわかります。

・リアルタイムプレイヤー数
・初めてプレイした人、続きからプレイした人
・どのマップに何回アクセスしたか
・どのマップで終了したか

これ以上のことをする場合の手順を書きます。

[イベント到達をカウントする]
例1.マップ「故郷」でサブイベント「主人公の記憶」を見たユーザー数を取得する

ツクールのイベント内にプラグインコマンドで次の入力をします。

ANALYTICS_EVENT 故郷 主人公の記憶を見た

「故郷」「主人公の記憶を見た」はマップIDやイベント名にあわせる必要はありません。
データを分析するあなたが直感的に分かる命名にしてください。

[変数を取得する]
例2.「普通の町」で「宝箱1」を開けたときの中身「変数1番」を取得する
ツクールのイベント内にプラグインコマンドで次の入力をします。

ANALYTICS_EVENT 普通の町 宝箱1 \v[1]
GA02229_6.jpg

例3.リザルト画面で戦闘回数、アクター1のレベルを取得する

ANALYTICS_EVENT リザルト 戦闘回数 \v[1]
ANALYTICS_EVENT リザルト アクター1のLv \v[2]

レポート確認編

収集結果を見る画面をレポートと呼びます。

●「リアルタイム」→「概要」
GA02229_8.jpg

すぐに機能が有効か確認できます
テストプレイをして、現在が「0」の場合は次の問題が考えられます。

-オフラインになっている
-TrackingIDがプラグインで設定されていない→3)をチェック
-TrackingIDが間違っている→2-4)をチェック

24時間以上経過したら以下のレポートにデータが反映されます。

●「オーディエンス」→「概要」
GA02229_14.jpg

・ユーザー数とはユニークアクセスのようなものでブラウザのCoockieの数
・セッションとはアクセス数のようなものでブラウザから発信されるアクセス
・新規ユーザー(New Visitor)ははじめてのCoockie、Returning Visitorは二度目移行のCoockieで判別

ここで役立つのは次の値
・平均セッション時間……平均プレイ時間

以下は検証2日目時点で取得できません
・地域……取得できれば、翻訳言語の判断材料になる
・テクノロジー……OS情報、機種情報など(Chromeということだけはわかる)
・ユーザー属性……どの層に刺さっているか、がわかる
これはツクールMVのChromiumに保存されたCoockie情報が、普段使いのブラウザのCoockieと連動していないからかもしれません。

セッションについて
規定では30分無反応だと切断され、再開したらランディングページとしてカウントされる
(プラグインパラメーターのtimeoutは5000秒=83分なのでおそらく83分無操作の場合切断)
Title画面以外で再開箇所が予期しないマップの場合はこの挙動が考えられる

●「行動」レポート→概要

ここが一番見る箇所。
各種値は自分の作品で、実物を見た方が良いでしょう。

・イベントカテゴリ
GA02229_10.jpg

先の例だとプラグインコマンド「ANALYTICS_EVENT 普通の町 宝箱1 \v[1]」の中の「普通の町」のカウント(マップ遷移数)が確認できます

・イベントアクション
GA02229_11.jpg

先の例だとプラグインコマンド「ANALYTICS_EVENT 普通の町 宝箱1 \v[1]」の中の「宝箱1」のカウントが確認できます

・イベントラベル
GA02229_12.jpg

先の例だとプラグインコマンド「ANALYTICS_EVENT 普通の町 宝箱1 \v[1]」の中の「\v[1](変数1)」の値が確認できます
乱数0-100にしていたのでこのようなバラつきが観測できました

プラグインコマンドを実行する際、カテゴリ、アクション、ラベルはこのような自分が見るときを意識して命名しておくと良いです。

・行動フロー
GA02229_16.jpg

マップ遷移と離脱(セーブして終了した直前)がわかります
ランディングページとはアクセスの起点のこと。多くはTitleになるはず

・サイトコンテンツ
GA02229_15.jpg

ページはマップをあらわします。
ここでの表示を意識して私は
「マップID_マップ名」にしていました
プロジェクト側の工夫もしておくと分析がラクになります
GA02229_13.jpg


この行動レポートをフィルターにかけて分析して……というのが先に待っている作業。
だから冒頭の説明は煽りでもなく、本当に大変なのです。
後は各々研究してください。

私の使い方

・EU圏ユーザーが触れる環境では使わない(プラグインを無効にする)

理由:GDPR対応がとれないため
具体的にはEU圏のユーザーから個人情報取得について物言いがついた場合、72時間以内にEU監督機関に連絡しなければならない
https://www.pwc.com/jp/ja/knowledge/column/awareness-cyber-security/gdpr01.html
詳細および罰則についてはWEB検索やリンク先に譲ります

・プライバシーポリシーは作品タイトルではなく、製品ページ、公式サイトにする

理由:ユーザビリティの問題
リンククレジットプラグインを改変して公式サイト、作者Twitterに誘導する施策の方が良いと思います
公式サイトには将来の作品への動線も作る、これで作品同士を繋げられます(こうした将来を見据えた設計は大事)

・機能の有効化/無効化

無料体験版は基本有効にして使って頂く
製品版はプレイヤーさんがON/OFFを選べる(規定はOFF)
基本的にはゲーム内でプレイヤーさんが選べるものにする

[マップ遷移の情報取得]
有効化:ANALYTICS_MOVE_TURN ON
無効化:ANALYTICS_MOVE_TURN OFF

[イベントの情報取得]
有効化:ANALYTICS_CND_TURN ON
無効化:ANALYTICS_CND_TURN OFF

これらはセーブに保存されません。
設定例としては、選択肢で許可を問う、→設定情報をツクールのスイッチか変数に記録。
ゲーム開始時に実行するコモンイベントの中で条件分岐-スイッチONの場合-プラグインコマンド「ANALYTICS_CND_TURN ON」みたいにする必要があります。

Kindle本体の広告アリ版/ナシ版のように本機能有効化版(フィードバック機能付き版・少しお値引きする)と無効化版と本体を分けてもいいかもしれませんね。

リザルトの値やChapter到達など限定的な場面だけトラッキングしたい場合はプラグインオプションの「isAnalyzingMove」をOFFにすればOKです(タイトルや場所移動でトラッキングしなくなる)

その他

本機能とのつながりはありませんが、Googleアナリティクスについての説明補足です。

・Steamworks(Steamの設定ページ)にもGoogleアナリティクスのトラッキングコードを埋め込めます
例.Steam製品ページ、コミュニティハブのページ
・Wixの有料プランにはGoogleアナリティクストラッキングコードに対応しています
・私のfanblogは無料ですがトラッキングコードに対応しています

・RPGアツマールでの利用においては利用規約第8条に抵触する恐れがあります
もし、大丈夫ですかと問い合わせた場合、明確にNOと返答されたら利用禁止が確定します
https://game.nicovideo.jp/atsumaru/term

◆◇

Googleアナリティクスはサービスをよりよくする改善のツールだと考えてます。
出入口を知り、入りやすくする、出るときは出た理由を改善する、滞在時間を快適なものにする……などなど。
こうした分析と改善の思考をセットで考えて、プラグインの導入検討をされることをオススメします。
厳しい言い方をしますと、数字を見て上がった下がったを見るだけなら、入れない方がいいです。

【PR】

「言葉を集め、世界を旅するRPG」をキャッチコピーにしたオリジナルRPGを制作しています。
毎日7:30に制作状況を公開しているので、興味を覚えた方はご覧いただけるとうれしいです。
https://ci-en.net/creator/4244

参考

プラグインコマンド実行状況をコンソールで見た場合
通信処理102バイト、場所移動時の処理時間は57~70ms(20回試行)
GA02229_7_2.jpg

2020年02月20日

RPGツクールMV「RTK1_Composite プラグイン」簡単・便利な使い方

RPGツクールMV「RTK1_Composite プラグイン」簡単・便利な使い方

yamachan様の合成プラグインがバージョンアップ。
このバージョンアップは以前私がご相談を差し上げたところ、要望に応えてくださった形。
感謝です。
多くの方に利用頂ければとおもい、私が組んだ最短手番をご紹介します。

プラグインページ
制作者:yamachan様
https://github.com/yamachan/jgss-hack/blob/master/RTK1_Composite.js
説明ページ:
https://github.com/yamachan/jgss-hack/blob/master/RTK1_Composite.ja.md
※基盤となるRTK1_Core プラグインも必要です
RTK1_Core
https://raw.githubusercontent.com/yamachan/jgss-hack/master/RTK1_Core.js

できること

・武器、防具、アイテムの合成システム
・確率設定で大成功、失敗を表現できる。成功先のアイテムも指定可能
・レシピ作成(スクリプトで個体指定可能)
・ソート機能(制作した順番で雑多にならない。ソートは共通指定のほか個体指定も可能)

アイテム(武器、防具)を1点ずつ選定して表示する合成ショップ

デフォルトではすべての品が表示されるため、私はこのように品を選定しています。

◆注釈:レシピ初期化
◆プラグインコマンド:RTK1_Composite clear
===========
◆注釈:表示したいレシピを登録
◆注釈:この例
   :i42:ヒールハーブ(薬草)
   :i46:クリアハーブ(毒消し)
   :i47:メメントモリ(フェニックスのお)
   :i…アイテム、w…武器、a…防具
===========
◆プラグインコマンド:RTK1_Composite add i42,i46,i47
◆プラグインコマンド:RTK1_Composite shop custom

0220_3.jpg

0220_3_2.jpg

作ったことのある品を表示する合成ショップ

・かけだしの錬金術師と一緒に成長するイメージ
・後述の作業場と異なり金をとります

◆プラグインコマンド:RTK1_Composite shop-safe learn
0220_2.jpg
0220_3_1_2.jpg


作ったことのある品を表示する合成場

・覚えたものを自宅の作業場で作るイメージ
・金かかりません

◆プラグインコマンド:RTK1_Composite workroom-safe learn

並びを整える

プラグインパラメーター「list sort」を設定しておくと、「作ったことのある〜」で
並びが整えられます(作った順にならない)

以上、4手番を抑えれば簡単に合成ショップが実現できます。
最後に、yamachan様、ありがとうございました。

2020年02月17日

ツクールの変数の値は、小数点以下が切り捨てられる

地形によって威力の変わるスキルを作ったときのこと。
小数点以下が切り捨てられることに気付きました。

rpg_objects.js563行目、変数の代入処理のところ。

Game_Variables.prototype.setValue = function(variableId, value) {
if (variableId > 0 && variableId < $dataSystem.variables.length) {
if (typeof value === 'number') {
value = Math.floor(value);
}
this._data[variableId] = value;
this.onChange();
}
};

この「Math.floor」は小数点以下を切り捨てるメソッド。
これが切り捨てられる原因。

「Math.floor」メソッドをプラグインで書き換えればどうにかなりそうです。
しかし弊害が怖いので計算式の該当箇所を百分率にすることで解決。
勉強になりました。

2020年02月11日

【ツクールMV】文字の不透明度を調整

rpg_core.js内の//箇所を追記することで文字の不透明度を変更できます。

Window.prototype._refreshPauseSign = function() {
var sx = 144;
var sy = 96;
var p = 24;
this.contentsOpacity = 125;//不透明度を設定255→125で半透明
this._windowPauseSignSprite.bitmap = this._windowskin;
this._windowPauseSignSprite.anchor.x = 0.5;
this._windowPauseSignSprite.anchor.y = 1;
this._windowPauseSignSprite.move(this._width / 2, this._height);
this._windowPauseSignSprite.setFrame(sx, sy, p, p);
this._windowPauseSignSprite.alpha = 0;
};

200211_100.jpg

このままでは使い勝手が悪いため、スイッチをトリガーにON/OFFを切り替えるようにします。

Window.prototype._refreshPauseSign = function() {
var sx = 144;
var sy = 96;
var p = 24;
if($gameSwitches.value(1)){//スイッチ1番がONのとき
this.contentsOpacity = 125;//不透明度を125にする
}
this._windowPauseSignSprite.bitmap = this._windowskin;
this._windowPauseSignSprite.anchor.x = 0.5;
this._windowPauseSignSprite.anchor.y = 1;
this._windowPauseSignSprite.move(this._width / 2, this._height);
this._windowPauseSignSprite.setFrame(sx, sy, p, p);
this._windowPauseSignSprite.alpha = 0;
};

当初の目的とは違いますが、発見でした。