SampleDemoWindow を使ってみる
Packages/UImGui/Sample/SampleDemoWindow.prefab
をシーンに展開。
- Camera に MainCamera を設定
- RenderType を Procedual に変更
Play
する。
動いた。
ImGui の MainLoop
ImGui の基本構造は下記のようになっています。
詳しくは、
https://github.com/ocornut/imgui/blob/master/examples/example_win32_directx11/main.cpp
初期化
ImGui.CreateContext()
// フォント初期化
// 最初に ImGui.NewFrame() を呼ぶ前に fontatlas のテクスチャを生成して
// io にテクスチャを渡してやる必要がある
While True // mainloop
{
// NewFrame を呼び出す前に io 更新する必要がある。
// 最低限、io.DisplaySize
// その他、マウスイベント、キーボードイベントを準備する
ImGui.NewFrame()
// ImGui のGUIを構築する。Begin ~ End
ImGui.Render()
// ImGui の DrawList を描画して画面を更新する
Renderer(ImGui.GetDrawList())
}
ImGui.DeleteContext()
UImGui では、メインループの制御はすべて UImGui コンポーネントがやってくれます。
ユーザーは、ImGui.NewFrame()
と ImGui.Render()
の間の部分を作成します。
Minimum なシーンを自作する
// Main.cs
using UnityEngine;
public class Main : MonoBehaviour
{
private void OnEnable()
{
UImGui.UImGuiUtility.Layout += OnLayout;
}
private void OnDisable()
{
UImGui.UImGuiUtility.Layout -= OnLayout;
}
private void OnLayout(UImGui.UImGui uImGui)
{
ImGuiNET.ImGui.ShowDemoWindow();
}
}
- camera
- empty
- Main をアタッチ
- UImGui をアタッチ
- Camera
- mesh procedual
- shader(Packages-UImGui-Resources-DefaultShader)
- style(Packages-UImGui-Resources-DefaultStyle)
UImGui の動作
- Awake で ImGui.CreateContext()
- Font初期化
- MainLoop
- Layout 呼び出し
- Destroy
Widget を探す
demo
- demo window から目的の Widget を探す
- 関連する文字列とか検索に使えそうなところ探す
- https://github.com/ocornut/imgui/blob/v1.84/imgui_demo.cpp から該当部分を探してコピペする
- cs に改造する
ギャラリー
眺める