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

目次



レファレンス

KKAPI(基礎的なもの?)

https://github.com/IllusionMods/IllusionModdingAPI...
ゲームと API 自体に関する全体的な情報を提供し、スレッドの同期や
必要なプラグインがインストールされているかどうかの確認などの便利なツールを提供します。
 
  • GameMode:ゲームの現在のゲームプレイ モード
→キャラメイクか?スタジオか?メインゲームか?その他か?を知る
 
  • KoikatuAPI:ゲームと API 自体に関する全体的な情報を提供し、いくつかの便利なツールを提供します。
→プロセス名を知る?VRかどうかなど?
→追加のログメッセージや終了検知?
 
  • SceneApi
→ポップアップ画面関連?
GetLoadSceneName() : 現在読み込まれているゲーム シーンの名前を取得
 
  • UniversalRefObjKey
→ChaReference.RefObjKey の代替?
 

KKAPI.Chara(キャラクター関連)

https://github.com/IllusionMods/IllusionModdingAPI...
  • CharacterApi
ゲーム内およびスタジオ内のすべてのキャラクターにカスタム ロジックを簡単に追加する方法を提供します。
エラーが発生しやすいすべての配管を処理し、データを簡単に保存してキャラクター カードにロードできるようにします。
Koikatu Overlay ModsやKK_BecomeTrapなど、多くの mod で大きな効果を得るために使用されています。
  
  • CharacterExtensions
→ChaControl、ChaFile などで使用する拡張機能
  • CharaCustomFunctionController
カスタム キャラクタ エクステンションのベース タイプ。
キャラクターがいつ変更されたか、またはカスタムデータをキャラクターカードに保存および
ロードする方法を理解するために必要な厄介なフックを抽象化する多くの便利なメソッドを提供します。
このコントローラーは、ゲームにスポーンされたすべてのキャラクターのルート gameObjects に追加される MonoBehaviour です。
コントローラーでは、コンストラクター、Awake または Start を使用しないことをお勧めします。
KKAPI.Chara.CharaCustomFunctionController.OnReload(KKAPI.GameMode,System.Boolean)代わりに使用してください。
 
CharaReloadEventArgs
→キャラクター リロード イベントで使用されるイベント引数
 
  • CoordinateEventArgs
→コーデカードを扱うイベントでトリガー

KKAPI.MainGame(メインゲーム関連)

EventUtils
GameAPI
GameCustomFunctionController
GameExtensions
GameSaveLoadEventArgs
IgnoreCaseEqualityComparer
TalkSceneActionKind
TalkSceneUtils

KKAPI.Maker(キャラメイク関連)

AccessoriesApi
AccessoryContolVisibilityArgs
AccessoryControlWrapper<T, TVal>
AccessoryCopyEventArgs
AccessorySlotEventArgs
AccessoryTransferEventArgs
AccessoryWindowControlValueChangedEventArgs<TVal>
ChaFileLoadedEventArgs
CharacterLoadFlags
CoordinateLoadFlags
MakerAPI
MakerCardSave
MakerCategory
MakerConstants
RegisterCustomControlsEvent
RegisterSubCategoriesEvent

KKAPI.Maker.UI(キャラメイクのUI関連)

BaseEditableGuiEntry<TValue>
BaseGuiEntry
MakerButton
MakerColor
MakerCoordinateLoadToggle
MakerDropdown
MakerImage
MakerLoadToggle
MakerRadioButtons
MakerSeparator
MakerSlider
MakerText
MakerTextbox
MakerToggle

KKAPI.Maker.UI.Sidebar(キャラメイクのサイドバー関連)

ISidebarControl
SidebarSeparator
SidebarToggle

KKAPI.Studio(スタジオ関連)

StudioAPI
StudioObjectExtensions

KKAPI.Studio.SaveLoad(スタジオのセーブ・ロード関連)

ObjectDeletedEventArgs
ObjectsCopiedEventArgs
ObjectsSelectedEventArgs
ObjectVisibilityToggledEventArgs
SceneCustomFunctionController
SceneLoadEventArgs
SceneOperationKind
StudioSaveLoadApi

KKAPI.Studio.UI(スタジオのUI関連)

BaseCurrentStateEditableGuiEntry<T>
CurrentStateCategory
CurrentStateCategoryDropdown
CurrentStateCategorySlider
CurrentStateCategorySubItemBase
CurrentStateCategorySwitch
CurrentStateCategoryToggle
CustomToolbarButtons
SceneEffectsCategory
SceneEffectsSliderSet
SceneEffectsToggleSet
ToolbarButton
ToolbarToggle

KKAPI.Utilities(便利機能)

https://github.com/IllusionMods/IllusionModdingAPI...
 
  • ConfigurationManagerAttributes
ConfigurationManager 設定ウィンドウ内に設定を表示する方法を指定するクラス。
使用法: 独自のプラグインに含める代わりに、このクラスのコピーを使用できます。
新しいインスタンスを作成し、オーバーライドするフィールドを割り当てて、設定のタグとして渡します。
フィールドが null (デフォルト) の場合、そのフィールドは無視され、設定の表示方法は変更されません。
フィールドが null でない場合 (値を割り当てた場合)、デフォルトの動作が上書きされます。
 
  • CoroutineUtils
コルーチンを操作するためのユーティリティ メソッド。
 
  • Extensions
他のカテゴリに当てはまらない一般的なユーティリティ拡張。
 
  • HSceneUtils
Hシーン/メインゲームを操作するためのユーティリティメソッド。
Boolean IsHoushi(このHFlaghFlag) //現在奉仕モードか?
Boolean IsSonyu(このHFlaghFlag) //現在挿入モードか?
 
  • ImguiComboBox
GUILayout エリアとウィンドウで使用するドロップダウン コントロール。
インスタンスを保持し、Show を呼び出して OnGUI 内に描画します。
ドロップダウン リストが開いている場合は、OnGUI 領域/ウィンドウの最後で呼び出しDrawDropdownIfOpenて、
実際にドロップダウン リストを表示することを忘れないでください。
グローバルに開くことができるドロップダウン リストは 1 つだけです。
新しいドロップダウンを開くと、選択したインデックスを変更せずに他のすべてのドロップダウンが閉じられます。
 
  • IMGUIUtils
MGUI / OnGui を操作するためのユーティリティ メソッド。
 
  • ImguiWindow<T>
完全な MonoBehaviour として実装される IMGUI ウィンドウの基底クラス。
インスタンス化してウィンドウを追加します。インスタンスは 1つだけ存在する必要があります。
enable プロパティを設定して、ウィンドウの描画のオンとオフを切り替えます (デフォルトではオフ)。
 
  • MemoryInfo
システム メモリのステータスに関する情報を提供します
 
  • ObservableExtensions
UniRx IObservable 拡張メソッドへの追加
 
  • OpenFileDialog
Windows のファイルを開くダイアログにアクセスできます。
 
  • ReadOnlyDictionary<TKey, TValue>
読み取り専用辞書ラッパー。ベース辞書が変更されないように保護します。
警告: ディクショナリ内の参照型は引き続き変更できます。
 
  • RecycleBinUtil
ファイルを完全に削除するのではなく、ごみ箱に移動できます。
 
  • ResourceUtils
埋め込みリソースを操作するためのユーティリティ メソッド。
 
  • TextureUtils
テクスチャ オブジェクトを操作するためのユーティリティ メソッド。
 
  • TextUtils
テキストを操作するためのユーティリティ メソッド。
 
  • TimelineCompatibility
タイムライン サポートを他のプラグインに追加するための API。
サポートは、タイムラインの補間可能リストに表示される補間可能モデルを登録することによって行われます。
 
  • TranslationHelper
AutoTranslator を抽象化するクラス。テキストを現在の言語に翻訳できます。
 
  • WindowsStringComparer
ファイルを並べ替えるために Windows エクスプローラーで使用されるものと同等の文字列比較子

KoiSkinOverlayX(テクスチャ関連)

  • TextureStorage
ExtensibleSaveFormat.PluginData
拡張データ(キャラクター カードやシーンなど)から保存およびロードする必要があるテクスチャを格納するためのクラス。
重複するテクスチャは自動的に処理されるため、テクスチャのコピーが 1 つだけメモリに保持されて保存されます。

THIPS

シーンの取得

KKAPI.SceneApi.GetLoadSceneName() == "Title"

リフレクション

//OK //var shortcut = GameObject.FindObjectOfType<ShortCutKey>(); //var myvalue = Traverse.Create(shortcut).Field("hoge_0").GetValue<int>(); //UnityEngine.Debug.Log("myvalue::"+myvalue); // //var go = GameObject.Find("ShortCutObject"); //var hoge = go.GetComponent("ShortCutKey"); //NG //var hoge = GameObject.FindObjectOfType<ShortCutKey>(); //Ok //var myvalue = Traverse.Create(hoge).Field("freeHScene").GetValue(); // //リフレクションを通じてフィールドの値を取得する ///"freeHScene"の下にあるフィールド「stageH1」にアクセス //KKAPI.Utilities.Extensions.GetFieldValue(this, "freeHScene", out object value2); //KKAPI.Utilities.Extensions.GetFieldValue(value2, "stageH1", out object value);

KKAPI(IllusionModdingAPI)概要

KKAPIは、Kokatsu!のMODをより簡単に、よりバグを少なく作成することを目的としたプロジェクトです。
ゲームのセーブ・ロードのロジックをフックしたり、ランタイムにインターフェース要素を作成したり、その他多くのタスクの複雑さを抽象化します。
また、多くの便利なメソッドやツールを提供しています。

代表的な使用例と解説

ここでは、KKAPIを使用してキャラクターに新しい機能を追加する典型的なプラグインの構造を紹介します。
例としてBecomeTrapを使用します。このページのすべてのソースコードはここで見ることができます。
これは、私にとってうまくいったものの一例です。別のセットアップを使用することもできますが、少なくともコントローラを分割する必要があります。
BecomeTrapプラグインの目的は、キャラクターカードに保存されている設定に基づいて、異なるキャラクターアニメーションをロードすることです。この設定はキャラクターメーカーで設定します。


BecomeTrapのプロジェクト構成
このプラグインが使用しているクラスは、すべてこのような構成になっています。
この構造により、「ビジネス」コードと、インターフェースコードや「グルー」コードを分離することができます。
これにより、コードの理解やメンテナンスが容易になります。
  • BecomeTrap.cs
  • BecomeTrap.Hooks.cs
  • BecomeTrapController.cs
  • BecomeTrapGui.cs

BecomeTrap.cs(初期設定)

これは「糊付け」ロジックです。(Hook・フックへの糊付け?)
プラグインのエントリーポイントとして機能し、プラグインの登録や依存性・非互換性のチェックを行います。
// BepInExで読み込まれるプラグインとして指定する。
[BepInPlugin(GUID, "Koikatsu: Become Trap", Version)]
// BepInExに、KKAPIの実行と、その最新版が必要であることを伝える。詳しくはKoikatuAPI.VersionConstのドキュメントを確認してください。
[BepInDependency(KKAPI.KoikatuAPI.GUID, KKAPI.KoikatuAPI.VersionConst)]
public partial class BecomeTrap : BaseUnityPlugin
{
    // BepInDependency属性を使用するなどして、他のプラグインが簡単にあなたの存在とバージョンを確認できるように、あなたのGUIDと現在のバージョンの両方を公開する。
    // public constフィールドに注意! 
    // 絶対に必要でない限り、GUIDを変更しないようにしましょう。あなたのプラグインに依存しているプラグインはそれを認識できなくなります。
    //また、関数コントローラでそれを使用すると、変更前にカードに保存されていたすべてのデータを失うことになります!
    public const string GUID = "marco.becometrap";
    public const string Version = "2.0";

    internal static BecomeTrap Instance;
    internal static new ManualLogSource Logger;

    private void Awake()
    {
        Instance = this;
        Logger = base.Logger;

        if (StudioAPI.InsideStudio) return;

        // キャラクターに依存するロジックを登録します。
        // ゲーム内の全てのキャラクターにこのコンポーネントの新しいインスタンスが追加されます。
        // GUIDはキャラクターカードやシーン、ゲームセーブに保存される拡張データのIDとして使用されます。
        // カードやシーン、セーブデータのIDとして使用されるため、一意であることを確認し、変更しないようにしましょう。
        CharacterApi.RegisterExtraBehaviour<BecomeTrapController>(GUID);

        BecomeTrapGui.Initialize();

        // フックを登録する(この例では BecomeTrap.Hooks.cs に含まれる)。
        HarmonyWrapper.PatchAll(typeof(Hooks));
    }
}

BecomeTrap.hooks.cs(フック)

この部分はプラグインに大きく依存します。
この場合フックは「BecomeTrapController.IsTrap」プロパティをチェックし、もし true ならば異なるアセットをロードする。
実際のフックはここで見ることができます。
通常、フックが動作しているキャラクターを特定し、そのキャラクターのコントローラを取得するメソッドを作成することになります。
private static BecomeTrapController GetController(Player player)
{
    // GameObjectやComponent/MonoBehaviorsを扱うときは、?を使うのではなく、常に完全なNULLチェックを行う。
    if(player == null || player.chaCtrl == null) return null;
    // コントローラは、キャラクターのルートgameobjectに追加されます。
    return player.chaCtrl.gameObject
        // ChaCtrlが存在する場合、すべてのコントローラは既に追加されていると考えてよいでしょう。
        .GetComponent<BecomeTrapController>();
}

コメントをかく


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

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

Menu

【メニュー編集】

スカイリム関連

スカイリム関連


Menu

【メニュー編集】

スクリプト関連

フリーエリア

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