VGUI2について



・(´・ω・`)ぶいぐいつー?
VGUIというのは、インリン・オブ・ジョイ・トイの略です。Valveはこの Windowsをパクったグラフィカル・ユーザー・インターフェイスをHL2の ウインドウやHUDにははもちろんのこと、Steamのような デスクトップアプリケーションにも使用しています。

MODソースコード展開先のsrc/public/vgui_controls 下には各コントロール(画面の部品)クラスのヘッダファイルが転がっていて現在55個ぐらい あります。これらコントロールのクラスを継承するなりそのまま使うなりして メニューやらボタンをプリプリっと作ればいいんです。

Valveの用意したこれらのクラスを継承するだけではどうしても解決できない問題 がある場合はsrc/vgui2/controlsの下に各クラスの ソース&プロジェクトファイルがあるのでそれを改造&ビルドして出来上がったスタティックライブラリを client.dllをビルドする際にリンクしてやって くださいな。でも、まあ、そんなに頑張るのはやめよ〜よ〜、他にもやることは一杯あるじゃない。

・画面の構成
全ての画面コントロールの基底クラスはPanelクラスになっております。ゲームの画面はPanelクラス もしくはPanelクラスを継承したサブクラスが親子の関係で組み合わせられて構成されております。

で、早い話が親コントロールの下に子コントロール、そのまた子コントロールがダラダラぶら下っていって ピラミッド社会を形成してるんですよ。
そのピラミッドの頂点に君臨してるのがクライアントのrootパネルなんですが、 それ自体は見えません、そっから何段階か下ったとこの子パネルたちが実際に我々が見てるパネルやウインドウです。

・新規に作ったパネルやウインドウは使用目的によって以下のいずれかのパネルの子になるでしょうね。
GAME UI DLLパネル
(GameUI Panel)
シングルなら「セーブ」、「ロード」・・・。マルチなら「サーバー作成」、「フレンド」・・・。 そんなのが並んでるメニュー部分と、コンソールなんかがこのパネルの子になってます。
CLIENT DLLパネル
(staticClientDLLPanel)
マルチプレイゲーム中のスコア表示パネルだとか、HUDでヘルスやら弾薬数の表示をペタペタ貼り付けるための親パネル(ビューポート)がこのパネルの子になってます。
またGAME UI DLLパネルの表示が有効になるとこのパネルの表示が無効に切り替わります(そうなるようにSourceエンジンが操作してる)。
TOOLS パネル
(staticClientDLLToolsPanel)
コンソールから"+budget"を実行した際のBUDGETパネルや、"cl_showfps 1"を実行した際の FPS表示パネル(背景が透過しているのでパネルに見えませんが)なんかがこのパネルの子になってます。
GAME UI DLLパネルよりも背面に位置してます。


コンソールから以下のコマンドを実行してみるとVGUI Hierarchyだかアラーキーだかいう コントロールの階層をツリー形式で表示してくれるウインドウが開きます。
sv_cheats 1
vgui_drawtree 1



・ツリー上の配色の意味はこう
白、明るい黄色 可視状態にあるコントロールを示しています。 黄色の物はポップアップ式のパネル(Frameもしくはそのサブクラスのコントロールだそうです)。
灰色、暗い黄色 不可視状態にあるコントロールを示しています。
緑色 現在フォーカスを取得した状態にあるコントロールを示しています。

・ウインドウの上側に並んでるチェックBOXを操作するとこんなにステキな機能が働きますよ
Show Visible 可視状態にあるコントロールをツリー上に表示します。
Show Hidden 不可視状態にあるコントロールをツリー上に表示します。
コラー!Show Visibleのチェックを外してこっちだけチェックしたら一番てっぺんの パネルがツリーから消えちまうから何も見えねえじゃねえかー!
Popups only ポップアップ式のパネルだけツリーに表示してくれます。
Highlight Mouse Over 画面上のマウスカーソルの場所にあるコントロールが強調表示されて、 該当するコントロールのあるところまでツリーが自動的に開きます。
画面の右上に子から親の順にズラーっとコントロールの一覧も表示してくれる模様。
でもstaticClientDLLPanelの子コントロールは反応してくれない
Freeze ツリーの表示を凍結して勝手に更新されないようにします。
Show Addresses 各コントロールのメモリアドレスが見れます。
見えて何か嬉しいことがあんのかどうかはシラネーヨ。
Show Alpha コントロールのアルファ値。(0で透け透け、255で透けてない)
てっきりコントロール背景のアルファ値を表示してんのかと思ったらみんな255になってるところを見ると違うらしい。
In Render Order コントロールを描画する順に整列してくれる。下に行くほど後に描画(手前に描画される)。
Windowsで言うところのZオーダーを知ることができるんですよ。

・すっごっいっでっすっね〜((C)所)
これらのコントロールを駆使すればテキストエディタやWEBブラウザも出来ちゃうね!いらんけど。

(´・ω・`)つもどる