最終更新: kenken2020 2024年03月19日(火) 19:01:11履歴
目次
マクロウィンドウ
マクロ名ボタン文字色
白:マクロ(通常) / 紫:コンパイル済マクロ /水色:ソースタイプマクロ/ 灰:実行不可
マクロ名ボタンを左クリックで実行(メモリ上にコンパイルされ実行されます)
コンパイルが失敗するとボタンが灰色がかった状態になりボタンが押せなくなります
Reloadボタンを押すことで編集及び再実行出来るようになります
右下の「C」ボタンをクリックするとマクロ名の右に継続実行トグルが表示されます
このトグルをONにした場合、指定したマクロが継続的に連続実行されます
※例えばメンバーの値を変更してもゲームシステムからすぐ元の値に戻されてしまうような場合に
変更し続ける事が出来ます
マクロ名ボタンをShift+左クリックでマクロ編集ウィンドウを表示
Shift+右クリックでマクロ削除
右クリックでコンパイル済みマクロを作成(拡張子ipc)
※コンパイル済みマクロはコンパイラ設定をしていない環境でも実行可能です
コルーチンは無理?
GOLで作ったテスト用のマクロはオブジェクト「GOL_Macro_Test」にAddComponentでコンポーネントをアタッチしていく事とする
[Test]複数ソースマクロの使い方がわからない
「MacroMain()」はGOLマクロが1つ読み込まれるたびに1回呼ばれる?
GOLで作ったテスト用のマクロはオブジェクト「GOL_Macro_Test」にAddComponentでコンポーネントをアタッチしていく事とする
[Test]複数ソースマクロの使い方がわからない
「MacroMain()」はGOLマクロが1つ読み込まれるたびに1回呼ばれる?
public class GameObjectListMacro { public static void MacroMain() { new GameObject().AddComponent<ComponentA>(); } }
[GameObjectList] //リスト表示 ShowListKey=Ctrl+I //非表示 HideAllKey=Escape //マクロ リスト表示キー ShowMacroListKey=Ctrl+M //リセットキー RestartKey=Ctrl+Shift+Alt+I //McsE パス McsExePath=C:\Roslyn\csc.exe //Mono実行ファイルへのパス MonoExePath= //MscMono検索ディレクトリ McsMonoSearchDir= //参照されたアセンブリ ReferencedAssemblies= //外部コンパイルを強制する ForceExternalCompile=False //サイレント外部コンパイル SilentExternalCompile=False //マクロ実行専用 MacroExecuteOnly=False //自動実行マクロ AutoRunMacro=FirstRunMacro,true,CameraCtrlOff,false,[Cfg]TextColor,false
- IPALoaderX「BepInEx.IPALoader.dll」を「Plugin」フォルダへ入れる
- 「GameObjectList」とDLLを「Plugin」→「IPA」フォルダへ入れる
- GOLを「Plugin」\IPA」フォルダで動かす設定
- フォルダ「config」→ファイル「BepInEx.IPALoader.cfg」→設定「Plugins Path = BepInEx\plugins\IPA」
- マクロをコンパイル時のエラーを出力する
- フォルダ「BepInEx\plugins\IPA\GameObjectList\Macro」→ファイル「golconfig.ini」→設定「SilentExternalCompile=False」
- GOLのマクロのコンパイラを指定
- フォルダ「BepInEx\plugins\IPA\GameObjectList\Macro」→ファイル「golconfig.ini」→設定「McsExePath=C:\Windows\Microsoft.NET\Framework64\v4.0.30319\csc.exe」
- 要らないマクロを消す
- フォルダ「C:\illusion\KoikatsuSunshine\BepInEx\plugins\IPA\GameObjectList\Macro」を全部消す
- フォルダ「C:\illusion\KoikatsuSunshine\BepInEx\plugins\IPA\GameObjectList」→ファイル「golconfig.ini」→設定「AutoRunMacro=」
・Dictionaryは、Keyと呼ばれる名前と、Valueと呼ばれる値をセットで扱う連想配列
・C#のDictionaryを使用するには、以下の宣言が必要です。
→using System.Collections.Generic;
◎基本の使い方
・Dictionaryは、Keyのデータ型とValueのデータ型の両方を指定することが必要
・C#のDictionaryを使用するには、以下の宣言が必要です。
→using System.Collections.Generic;
◎基本の使い方
Dictionary<データ型1, データ型2> 変数名 = new Dictionary<データ型1, データ型2>();・上記の宣言により、Dictionaryをインスタンス化します。
・Dictionaryは、Keyのデータ型とValueのデータ型の両方を指定することが必要
概要
マクロファイルが1つだけなら導入方法の仕方はどれでも問題ないが、複数のマクロファイルにまたがる大規模なものだと、方法Bにしないとコンパイルエラーになる?
- IPALoaderXとは、IPA用に作成されたプラグインをインストールせずにロードできる BepInEx 用のプラグインです。
- このプラグインは、元のIPALoaderの改良版です。
- 「BepInEx.IPALoader.dll」を「BepInEx\plugins」フォルダに配置
- 「BepInEx.IPAVirtualizer.dll」と「BepInEx.IPAHarmonyShimmer.dll」を「BepInEx\patchers」フォルダーに配置します。
マクロファイルが1つだけなら導入方法の仕方はどれでも問題ないが、複数のマクロファイルにまたがる大規模なものだと、方法Bにしないとコンパイルエラーになる?
BepInExと同じフォルダ構成にする為、以下の修正を行う
- 「BepInEx\plugins\」に「IPA」と言うフォルダを作り、一度コイカツを起動する
- 「BepInEx\config」に「BepInEx.IPALoader.cfg」と言う設定ファイルが出来るので、中身を以下のように修正する
Plugins Path = Plugins
Plugins Path = BepInEx\plugins\IPA
- IPAフォルダの中にGameObjectListのフォルダとGameObjectList.dllを入れるとIPALoaderXで読み込む様になる
2018.04.22版からrspファイルでコンパイルオプションが指定できるようになった
「Macro」フォルダに「コンパイルするマクロと同じ名前.rsp」ファイルを作る
「Macro」フォルダに「コンパイルするマクロと同じ名前.rsp」ファイルを作る
問題点:GOLがコマンドラインにパスを渡す時に半角スペースが含まれていると上手くいかない?
Unityのパスが「C:\Program Files\Unity Hub」
Windowsの備え付けコンパイラ(GOLが使う外部コンパイラ)は「C:\Windows\Microsoft.NET」にあるので使える
参考:【C#】 CSCのバージョン メモ (.NET Framework v.s. Roslyn (Visual Studio 2019)):https://qiita.com/libraplanet/items/57e976d8cc6672...
C#のVer7以上が欲しい?C#のVer7以降は「Roslyn」と呼ばれる?
参考:Roslyn をインストールする (Visual Studioの使い方 Tips):https://www.ipentec.com/document/visual-studio-ins...
Roslynを落としてきてコンパイルする
パッケージマネージャーコンソールが表示されますので、下記のコマンドを実行します。
ここでできた「roslyn」フォルダを「C:\」直下に配置する
GOLの設定ファイル「golconfig.ini」にある以下の項目を変更「McsExePath=C:\Roslyn\csc.exe」
Unityのパスが「C:\Program Files\Unity Hub」
Windowsの備え付けコンパイラ(GOLが使う外部コンパイラ)は「C:\Windows\Microsoft.NET」にあるので使える
- しかしC#のVer5までしか対応していない
- GitHubのソースをVisualStudioでエラーが無いように見えても、ゲーム実行中にGOLでコンパイルをするとC#のバージョンに仕様の問題でエラーになる場合がある
参考:【C#】 CSCのバージョン メモ (.NET Framework v.s. Roslyn (Visual Studio 2019)):https://qiita.com/libraplanet/items/57e976d8cc6672...
C#のVer7以上が欲しい?C#のVer7以降は「Roslyn」と呼ばれる?
参考:Roslyn をインストールする (Visual Studioの使い方 Tips):https://www.ipentec.com/document/visual-studio-ins...
Roslynを落としてきてコンパイルする
- プロジェクトの種類は空のテンプレート?
パッケージマネージャーコンソールが表示されますので、下記のコマンドを実行します。
Install-package Microsoft.CodeDom.Providers.DotNetCompilerPlatformインストール後、プロジェクトをビルドします。"bin"ディレクトリ内に "roslyn" ディレクトリが作成されます。
ここでできた「roslyn」フォルダを「C:\」直下に配置する
GOLの設定ファイル「golconfig.ini」にある以下の項目を変更「McsExePath=C:\Roslyn\csc.exe」
- GOLが使う外部コンパイラ(Roslynのcsc.exe)のパス指定している
- Unityの GameObject をリスト表示する。
- マクロ機能有り
- ゲーム内のオブジェクトを一覧表示してその中の変数を書き換えたり、書き換えた値をマクロとして記録し再実行したり出来る
- GameObjectList (ver.20180504a) Download
- 起動ショートカットキー:Ctrl+Iキー
- 動作が怪しくなったらCtrl+Shift+Alt+Iキーでプラグインを再起動する!
マクロウィンドウ
- 起動ショートカットキー:Ctrl+Mキー
- .ipc:コンパイル済み(紫色)
マクロ名ボタン文字色
白:マクロ(通常) / 紫:コンパイル済マクロ /水色:ソースタイプマクロ/ 灰:実行不可
マクロ名ボタンを左クリックで実行(メモリ上にコンパイルされ実行されます)
コンパイルが失敗するとボタンが灰色がかった状態になりボタンが押せなくなります
Reloadボタンを押すことで編集及び再実行出来るようになります
右下の「C」ボタンをクリックするとマクロ名の右に継続実行トグルが表示されます
このトグルをONにした場合、指定したマクロが継続的に連続実行されます
※例えばメンバーの値を変更してもゲームシステムからすぐ元の値に戻されてしまうような場合に
変更し続ける事が出来ます
マクロ名ボタンをShift+左クリックでマクロ編集ウィンドウを表示
Shift+右クリックでマクロ削除
右クリックでコンパイル済みマクロを作成(拡張子ipc)
※コンパイル済みマクロはコンパイラ設定をしていない環境でも実行可能です
- 動作確認用スクリプト:[Cfg]スクリーンサイズ選択.cs
前提:「BepInEx」側の設定でゲーム起動時にコマンドプロンプトが表示される用にしておく
GOLの設定ファイル「golconfig.ini」→項目「SilentExternalCompile」→「False」に変更する
GOLの設定ファイル「golconfig.ini」→項目「SilentExternalCompile」→「False」に変更する
同じ名前で拡張子が違う場合「.ipc」はコンパイル済みなので、それだけあれば良い?
- CameraCtrlOff.ipc
- 本プラグイン動作時(ウィンドウ表示時)にカメラ制御をオフにし、Altキーを押している間本プラグインGUIを非表示にしてカメラ制御をオンに戻します
- [Cfg]TextColor.ipc
- 本プラグイン文字色設定マクロ
「FirstRunMacro.ipm」ファイルを「Macro」フォルダに入れる
- 名前は何でも良い?
AutoRunMacro=CameraCtrlOff,False,[Cfg]TextColor,False,FirstRunMacro,false項目「AutoRunMacro」にTrueがあると起動時に全てのマクロをコンパイルする?
- あらかじめゲーム中に該当マクロを右クリックしコンパイルし、拡張子「.ipm」以外のファイルは退避して置く?
- 自分自身(FirstRunMacro)のコンパイルし「FirstRunMacro.ipm」にしておく?
GameObjectList.MacroRun("起動したいマクロ");
- 「public static void MacroMain()」で実行するマクロの作成(GameObject)と破壊
- 「ComponentA」を新しく作成し取り付ける?
- 「public class ComponentA : MonoBehaviour」で取り付けた「ComponentA」の振る舞いを記述する
- GOLで自作プラグイン(DLL)を読み込む場合、.NET3.5で作る必要がある?
using UnityEngine; public class GameObjectListMacro { public static void MacroMain() { //マクロをリロードした時にGameObjectを複数作らない様にする処理 var go = GameObject.Find("GOL_Macro_Test");//マクロで作成したGameObjectを探している if (go) { //もしすでにゲームオブジェクトがあった場合、一度壊し(DestroyImmediate)新しく作り直す GameObject.DestroyImmediate(go); return; } //新しくゲームオブジェクトを作成する new GameObject("GOL_Macro_Test").AddComponent<ComponentA>(); } } public class ComponentA : MonoBehaviour { public int hogeA; private int hogeB; public void Start() { hogeA = 1; hogeB = 2; //デバッグ用出力 UnityEngine.Debug.Log("******Hello, Illusion*****"); } public string Huga() { return "Huga()"; } }
一番左のGOLウィンドウにはゲームオブジェクト(インスタンス)の一覧が表示される
ゲームオブジェクトをダブルクリックすれば、そのオブジェクトについているコンポーネント(クラス)が真ん中のウィンドウに表示される
サンプルの場合、フィールドの「hogeA」「hogeB」クリックすれば数字の閲覧や変更ができる
サンプルの場合、メソッドの「huga()」を選択し「Execute」を押せば、メソッドが実行される
ゲームオブジェクトをダブルクリックすれば、そのオブジェクトについているコンポーネント(クラス)が真ん中のウィンドウに表示される
- サンプルの場合「ComponentA」が表示される
- プライベート変数を表示する場合、ウィンドウ上部の「Nonpublic」にチェック、
- メソッドを表示する場合「Method」のチェックを入れる
サンプルの場合、フィールドの「hogeA」「hogeB」クリックすれば数字の閲覧や変更ができる
サンプルの場合、メソッドの「huga()」を選択し「Execute」を押せば、メソッドが実行される
コメントをかく