■Unity開発メモ用のWiki◎現在扱っていること・Unity全般・MMDからUnityへの変換してインポート・MMDの仕様把握・BlenderでMMDモデルのカスタム

目次


一時メモ

コルーチンは無理?
 
GOLで作ったテスト用のマクロはオブジェクト「GOL_Macro_Test」にAddComponentでコンポーネントをアタッチしていく事とする

[Test]複数ソースマクロの使い方がわからない


「MacroMain()」はGOLマクロが1つ読み込まれるたびに1回呼ばれる?

public class GameObjectListMacro
{
    public static void MacroMain()
    {
        new GameObject().AddComponent<ComponentA>();
    }
}

iniファイル

[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

GOL環境の構築

  • 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」を使う

・Dictionaryは、Keyと呼ばれる名前と、Valueと呼ばれる値をセットで扱う連想配列
・C#のDictionaryを使用するには、以下の宣言が必要です。
 →using System.Collections.Generic;
◎基本の使い方
Dictionary<データ型1, データ型2> 変数名 = new Dictionary<データ型1, データ型2>();
・上記の宣言により、Dictionaryをインスタンス化します。
・Dictionaryは、Keyのデータ型とValueのデータ型の両方を指定することが必要

GOLに必要な前提プラグイン「IPALoaderX」

概要
  • IPALoaderXとは、IPA用に作成されたプラグインをインストールせずにロードできる BepInEx 用のプラグインです。
    • このプラグインは、元のIPALoaderの改良版です。
入手先 導入
  • 「BepInEx.IPALoader.dll」を「BepInEx\plugins」フォルダに配置
  • 「BepInEx.IPAVirtualizer.dll」と「BepInEx.IPAHarmonyShimmer.dll」を「BepInEx\patchers」フォルダーに配置します。
 
マクロファイルが1つだけなら導入方法の仕方はどれでも問題ないが、複数のマクロファイルにまたがる大規模なものだと、方法Bにしないとコンパイルエラーになる?

導入A

BepInExと同じフォルダ構成にする為、以下の修正を行う
  • 「BepInEx\plugins\」に「IPA」と言うフォルダを作り、一度コイカツを起動する
  • 「BepInEx\config」に「BepInEx.IPALoader.cfg」と言う設定ファイルが出来るので、中身を以下のように修正する
Plugins Path = Plugins
 
Plugins Path = BepInEx\plugins\IPA
  • IPAフォルダの中にGameObjectListのフォルダとGameObjectList.dllを入れるとIPALoaderXで読み込む様になる

 

方法B

ゲーム実行ファイルが階層のフォルダに「Plugins」フォルダを作成する
「BepInEx.IPALoader.cfg」の設定は変更しない

以下のスクショのようにIPAローダーがプラグインを認識していれば成功

方法C

BepInExフォルダ内に「IPA」を作る

GOLとコンパイル

rspファイルによるコンパイルオプション

2018.04.22版からrspファイルでコンパイルオプションが指定できるようになった
「Macro」フォルダに「コンパイルするマクロと同じ名前.rsp」ファイルを作る
DLLの参照「/r」
/r:C:\DLLまでのパス\参照するDLLの名前.dll

特定の警告文を非表示にする「/nowarn」


C#コンパイラの更新

問題点:GOLがコマンドラインにパスを渡す時に半角スペースが含まれていると上手くいかない?
Unityのパスが「C:\Program Files\Unity Hub」
Windowsの備え付けコンパイラ(GOLが使う外部コンパイラ)は「C:\Windows\Microsoft.NET」にあるので使える
  • しかしC#のVer5までしか対応していない
    • GitHubのソースをVisualStudioでエラーが無いように見えても、ゲーム実行中にGOLでコンパイルをするとC#のバージョンに仕様の問題でエラーになる場合がある
参考:Unity と C# のバージョン:https://yotiky.hatenablog.com/entry/2020/06/18/uni...
参考:【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を落としてきてコンパイルする
  • プロジェクトの種類は空のテンプレート?
Visual Studio を起動し[ツール]メニューの[NuGet パッケージ マネージャー]の[パッケージ マネージャー コンソール]を選択
パッケージマネージャーコンソールが表示されますので、下記のコマンドを実行します。
Install-package Microsoft.CodeDom.Providers.DotNetCompilerPlatform
インストール後、プロジェクトをビルドします。"bin"ディレクトリ内に "roslyn" ディレクトリが作成されます。
ここでできた「roslyn」フォルダを「C:\」直下に配置する
GOLの設定ファイル「golconfig.ini」にある以下の項目を変更「McsExePath=C:\Roslyn\csc.exe」
  • GOLが使う外部コンパイラ(Roslynのcsc.exe)のパス指定している

GOL(GameObjectList)の概要

  • Unityの GameObject をリスト表示する。
  • マクロ機能有り
  • ゲーム内のオブジェクトを一覧表示してその中の変数を書き換えたり、書き換えた値をマクロとして記録し再実行したり出来る
入手先
  • GameObjectList (ver.20180504a) Download
導入:「IPALoaderX」の項目を参照

  • 起動ショートカットキー:Ctrl+Iキー
  • 動作が怪しくなったらCtrl+Shift+Alt+Iキーでプラグインを再起動する!
 
マクロウィンドウ
  • 起動ショートカットキー:Ctrl+Mキー

 
  • .ipc:コンパイル済み(紫色)
マクロ(拡張子ipm)
マクロ名ボタン文字色
白:マクロ(通常) / 紫:コンパイル済マクロ /水色:ソースタイプマクロ/ 灰:実行不可
 
マクロ名ボタンを左クリックで実行(メモリ上にコンパイルされ実行されます)
コンパイルが失敗するとボタンが灰色がかった状態になりボタンが押せなくなります
Reloadボタンを押すことで編集及び再実行出来るようになります

右下の「C」ボタンをクリックするとマクロ名の右に継続実行トグルが表示されます
このトグルをONにした場合、指定したマクロが継続的に連続実行されます
※例えばメンバーの値を変更してもゲームシステムからすぐ元の値に戻されてしまうような場合に
 変更し続ける事が出来ます

マクロ名ボタンをShift+左クリックでマクロ編集ウィンドウを表示
Shift+右クリックでマクロ削除
右クリックでコンパイル済みマクロを作成(拡張子ipc)

※コンパイル済みマクロはコンパイラ設定をしていない環境でも実行可能です 
  • 動作確認用スクリプト:[Cfg]スクリーンサイズ選択.cs

GOLのコンパイラエラーを表示する

前提:「BepInEx」側の設定でゲーム起動時にコマンドプロンプトが表示される用にしておく
GOLの設定ファイル「golconfig.ini」→項目「SilentExternalCompile」→「False」に変更する


GOLで最低限残しておくファイル

同じ名前で拡張子が違う場合「.ipc」はコンパイル済みなので、それだけあれば良い?
  • CameraCtrlOff.ipc
    • 本プラグイン動作時(ウィンドウ表示時)にカメラ制御をオフにし、Altキーを押している間本プラグインGUIを非表示にしてカメラ制御をオンに戻します
  • [Cfg]TextColor.ipc 
    • 本プラグイン文字色設定マクロ

GOLスクリプトの自動起動

「FirstRunMacro.ipm」ファイルを「Macro」フォルダに入れる
  • 名前は何でも良い?
GOLの設定ファイル「golconfig.ini」で項目「AutoRunMacro=」(オートラン設定?)に「FirstRunMacro,true,」(マクロ名,True)とする
AutoRunMacro=CameraCtrlOff,False,[Cfg]TextColor,False,FirstRunMacro,false
項目「AutoRunMacro」にTrueがあると起動時に全てのマクロをコンパイルする?
  • あらかじめゲーム中に該当マクロを右クリックしコンパイルし、拡張子「.ipm」以外のファイルは退避して置く?
  • 自分自身(FirstRunMacro)のコンパイルし「FirstRunMacro.ipm」にしておく?
FirstRunMacroの中に以下の書式で起動したいマクロを記述する
GameObjectList.MacroRun("起動したいマクロ");

GOLのサンプルマクロA

  • 「public static void MacroMain()」で実行するマクロの作成(GameObject)と破壊
    • 「ComponentA」を新しく作成し取り付ける?
  • 「public class ComponentA : MonoBehaviour」で取り付けた「ComponentA」の振る舞いを記述する
  • GOLで自作プラグイン(DLL)を読み込む場合、.NET3.5で作る必要がある?

「GOL_Macro_Test.cs」ファイル名のマクロを作った場合の例

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()";
    }
}

1.マクロの読み込み

「Ctrl+I」でマクロウィンドウを読み込む
実行したいマクロファイルをクリックする
マクロを修正した時は「Reload」を忘れない


2.マクロの実行

コンソールでマクロがコンパイルに成功し実行したことを確認する


3.マクロで追加されたコンポーネントの確認

「Ctrl+I」でGOLのGameObjectListウィンドウが表示される
「List Update」で更新し、「Has Render」でゲーム画面には非表示のゲームオブジェクトを表示する
成功していればスクショのように「GOL_Macro_Test」コンポーネントが表示される

 

4.サンプルマクロの内容をGOLウィンドウで確認する

一番左のGOLウィンドウにはゲームオブジェクト(インスタンス)の一覧が表示される
ゲームオブジェクトをダブルクリックすれば、そのオブジェクトについているコンポーネント(クラス)が真ん中のウィンドウに表示される
    • サンプルの場合「ComponentA」が表示される
さらにコンポーネントをクリックすれば、そのコンポーネントの変数やメソッドが表示される
  • プライベート変数を表示する場合、ウィンドウ上部の「Nonpublic」にチェック、
  • メソッドを表示する場合「Method」のチェックを入れる

サンプルの場合、フィールドの「hogeA」「hogeB」クリックすれば数字の閲覧や変更ができる

サンプルの場合、メソッドの「huga()」を選択し「Execute」を押せば、メソッドが実行される


コメントをかく


「http://」を含む投稿は禁止されています。

利用規約をご確認のうえご記入下さい

Menu

【メニュー編集】

スカイリム関連

スカイリム関連


Menu

【メニュー編集】

スクリプト関連

フリーエリア

管理人/副管理人のみ編集できます