デバッグ画面にショートカットキーを追加するスクリプト(VXAce版)

この記事はVXAce版です。MV版はこちら

概要

F9で表示するデバッグウィンドウはスイッチと変数の切り替えが面倒なので、ショートカットキーを追加します。

  • Sキー スイッチの先頭に飛ぶ
  • Vキー 変数の先頭に飛ぶ
  • 数字キー 入力した番号に飛ぶ

例1: s100 と入力するとスイッチの100番目に飛ぶ
例2: v12 と入力すると変数の12番目に飛ぶ

Backspaceキーも使えます。

使用感はこんな感じです。

ダウンロード

こちらから

デバッグ画面にショートカットキーを追加するプラグイン

この記事はMV版です。VXAce版はこちら

概要

F9で表示するデバッグウィンドウはスイッチと変数の切り替えが面倒なので、ショートカットキーを追加します。

  • Sキー スイッチの先頭に飛ぶ
  • Vキー 変数の先頭に飛ぶ
  • 数字キー 入力した番号に飛ぶ

例1: s100 と入力するとスイッチの100番目に飛ぶ
例2: v12 と入力すると変数の12番目に飛ぶ

Backspaceキーも使えます。

使用感はこんな感じです。

ダウンロード

こちらから

注意事項

キーマップに S V 0~9 BackSpace キーを登録するのでこれらを使うプラグインを使用している場合、競合起こす可能性がある気がします。
私は Input.keyMapper[8] = 'BackSpace' と登録していますが、他のプラグインがBackSpacebackspaceみたいに登録しているとどっちかが動かないことが起こります。

VX Aceプロジェクトのデータをテキストに変換する

概要

RPGツクールVX Aceのデータはプロジェクト内のDataフォルダに.rvdata2という形式で保存されています。
バイナリデータのため簡単に編集などはできないのですが、rvpackerというツールを使うと、テキストデータ(YAML形式)に変換することができます。もちろん、テキストデータから元のデータに戻すこともできます。
テキストデータにすることにより、会話やファイル名などの全置換を行うことができます。また、バージョン管理もしやすくなる利点があります。

Rubyのインストール

Windows10下でのインストールを説明します。rvpackerのInstallationも参照してください。
まず、Rubyをインストールする必要があります。
(Ruby Installer)[https://rubyinstaller.org/downloads/] からRuby+Devkitをダウンロードします(執筆時バージョンは2.5.1-2でした)
x64かx86かは環境に合わせてください。

Ruby Installer

ダウンロードしたら普通にインストールします。特に途中の選択肢は変更する必要ありません。
一緒にMSYS2もインストールする必要があり、最後に以下のようなプロンプトが立ち上がります。

MSYS2

ここで、1を押してエンターで、MSYS2 base installationを選択します。
これでRubyの準備はできました。

rvpackerのインストール

Windowsに標準に付属しているPowerShellを立ち上げます。
gem install rvpacker と入力し、エンターするとrvpackerがインストールできます。

テキストデータに変換する

PowerShellで変換したいツクールのプロジェクト配下(Game.rvproj2があるフォルダ)まで移動します。
そこで rvpacker --action unpack --project ./ --project-type ace とコマンドを実行します。
すると、フォルダにScriptsYAMLフォルダが生成されます。
ScriptsはRGSSスクリプトがruby形式になって保存されています。
YAMLフォルダ内に以下のように各rvdata2がYAML形式に変換されて保存されます。

MSYS2

中身は例えば、Items.yamlを見ると以下のようにテキストデータになっています。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
---
-
- !ruby/object:RPG::Item
description: ''
name: マッチ
consumable: false
occasion: 3
icon_index: 530
price: 0
scope: 0
animation_id: 0
note: ''
speed: 0
id: 1
features: []
effects: []
damage: !ruby/object:RPG::UsableItem::Damage
type: 0
element_id: 0
formula: '0'
variance: 20
critical: false
success_rate: 100
hit_type: 0
itype_id: 2
repeats: 1
tp_gain: 0

Mapxxx.yamlはそれぞれのマップのイベントなどが記載されています。
メッセージなどがこのように確認できます。

1
2
3
4
5
- !ruby/object:RPG::EventCommand {i: 0, c: 505, p: [*2]}
- !ruby/object:RPG::EventCommand {i: 0, c: 101, p: ['', 0, 0, 2]}
- !ruby/object:RPG::EventCommand {i: 0, c: 401, p: [エルル「なぁに、\|父さん」]}
- !ruby/object:RPG::EventCommand {i: 0, c: 101, p: ['', 0, 0, 2]}
- !ruby/object:RPG::EventCommand {i: 0, c: 401, p: [父「この間、隣のおばさんに聞いたんだが、\|]}

テキストから元のデータに戻す

逆にテキストから元のデータに戻す際は以下のようにコマンドを打ちます。

rvpacker --action pack --project ./ --project-type ace

まとめ

テキストデータにして編集することはできるにせよ、編集に失敗するとデータを壊す元になるのでバックアップをとってから、慎重に使いましょう。

シーンごとにビルド結果の容量を出す

ビルドするとEditor.logにどのアセットがどのくらいの容量使っているかが出力されます。
ただこのログファイルは長く、該当の容量が記載されている箇所を見つけるのは毎回面倒くさいです。
そこで、ログファイルの該当箇所だけを抽出したいです。
また、シーン別々にビルドしてどのシーンが容量を食っているのかもわかるようにしたいと思います。

というわけでエディタ拡張を作りました。
出力先のパス(outputPath)だけ変えてください。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
using System;
using System.Collections.Generic;
using System.IO;
using System.Text.RegularExpressions;
using UnityEditor;
using UnityEngine;

public class BuildScenes {

//出力先パス
static string outputPath = @"C:/work/sandbox/buildAllScenes/";

//メニューの BuildにBuild Scenesコマンドを追加
[MenuItem("Build/Build Scenes")]
public static void Build() {
Debug.Log(outputPath);
if (!Directory.Exists(outputPath)) {
Directory.CreateDirectory(outputPath);
}

var scenes = GetScenes();
BuildTarget target;
#if UNITY_EDITOR_WIN
target = BuildTarget.StandaloneWindows;
#else
target = BuildTarget.StandaloneOSXIntel;
#endif
for (var i = 0; i < scenes.Length; i++) {
var name = GetSceneName(scenes[i]);
string errorMessage = BuildPipeline.BuildPlayer(
new string[] { scenes[i] },
outputPath + name + ".exe", // 出力先
target, // ビルド対象プラットフォーム
BuildOptions.Development // ビルドオプション
);
Debug.Log(i + ":build " + name);
var log = AnalyzeLog();
StreamWriter writer = new StreamWriter(outputPath + name + ".log");
writer.WriteLine(log);
writer.Close();
}
}

//シーンのパスからシーン名だけを取得する
static string GetSceneName(string path) {
var a = path.LastIndexOf("/");
var b = path.LastIndexOf(".");
return path.Substring(a + 1, b - a - 1);
}

//ビルド対象のシーン一覧を取得する
static string[] GetScenes() {
List<string> sceneList = new List<string>();

EditorBuildSettingsScene[] scenes = EditorBuildSettings.scenes;
foreach (EditorBuildSettingsScene scene in scenes) {
sceneList.Add(scene.path);
}
return sceneList.ToArray();
}

//ログファイルを解析し、容量部分だけを抽出する
public static string AnalyzeLog() {
string logPath;
#if UNITY_EDITOR_WIN
logPath = @"C:\Users\" + Environment.UserName + @"\AppData\Local\Unity\Editor\Editor.log";
#else
logPath = "~/Library/Logs/Unity/Editor.log";
#endif
FileStream fs = new FileStream(logPath, FileMode.Open, FileAccess.Read, FileShare.ReadWrite);
StreamReader sr = new StreamReader(fs);
string text = sr.ReadToEnd();
sr.Close();
fs.Close();
var matches = new Regex(@"Build Report\s[\s\S]*?-------------------").Matches(text);
if (matches.Count <= 0) {
Debug.LogError("No Log");
return null;
}
return matches[matches.Count - 1].ToString();

}

}

実行すると出力先のフォルダにこんな感じでexeと.logファイルが出力されます。

block

logの中身はこんな感じです。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
Build Report
Uncompressed usage by category:
Textures 6.9 mb 14.1%
Meshes 0.0 kb 0.0%
Animations 0.0 kb 0.0%
Sounds 197.5 kb 0.4%
Shaders 5.0 mb 10.2%
Other Assets 520.2 kb 1.0%
Levels 5.5 kb 0.0%
Scripts 2.7 mb 5.5%
Included DLLs 3.9 mb 8.0%
File headers 47.8 kb 0.1%
Complete size 49.0 mb 100.0%

Used Assets and files from the Resources folder, sorted by uncompressed size:
4.5 mb 9.1% Assets/Mech/PostProcessing/Resources/Shaders/Uber.shader
3.1 mb 6.4% Assets/Fungus/Textures/DialogBoxSliced.png
2.2 mb 4.5% Assets/Fungus/Resources/Sprites/Background.png

使用バージョン

Unity 5.6.4f1
Windowsでのみ確認