Rust プラグインの基本的な GUI を実装する
Published on 2024/09/01Tags
概要
Rust プラグインの基本的な GUI を実装し、チャットコマンドを実行すると文字を表示します。
参考情報
関連情報
環境
- Visual Studio Code 1.91.1
- Docker Desktop 4.33.1
- .NETFramework Standard 2.1
- Microsoft.NETFramework.ReferenceAssemblies 1.0.3
- OpenMod.Rust.Oxide 3.8.10
GUI の実装
チャットコマンド gui
を実行すると Hello World!
を 5 秒間表示するプラグインを実装します。
-
背景のコンポーネントを実装します。Color は正規化された RGBA で指定します。
var imgComp = new CuiImageComponent { Color = "0.753 0.753 0.753 1", // silver: #c0c0c0 FadeIn = 1.0f };
-
文字のコンポーネントを実装します。
var txtComp = new CuiTextComponent { Text = "Hello World!", Color = "0 0 0 1", // black: #000000 FadeIn = 1.0f, Align = TextAnchor.MiddleCenter, FontSize = 24 };
-
位置のコンポーネントを実装します。Anchor は幅と高さを 0.0 (0%) から 1.0 (100%) までのパーセント (%) で表す数値です。Min 値はの左下隅の位置で、Max は右上隅の位置です。
var rectComp = new CuiRectTransformComponent { AnchorMin = "0.2 0.8", AnchorMax = "0.8 0.95" };
-
背景の要素を実装します。Parent は レイヤー を指定します。
var imgElem = new CuiElement { Name = "parentImageElement", Parent = "Hud", FadeOut = 1.0f, }; imgElem.Components.Add(imgComp); imgElem.Components.Add(rectComp);
-
文字の要素を実装します。
var txtElem = new CuiElement { Name = "childTextElement", FadeOut = 1.0f, }; txtElem.Components.Add(txtComp); txtElem.Components.Add(rectComp);
-
CuiElementContainer
に要素を追加します。var elements = new CuiElementContainer(); elements.Add(txtElem); elements.Add(imgElem);
-
実装した GUI をプレイヤーに送信します。
CuiHelper.AddUi(player, elements);
-
GUI が 5 秒後に消えるようにタイマーを実装します。
timer.Once(5.0f, () => { CuiHelper.DestroyUi(player, "parentImageElement"); CuiHelper.DestroyUi(player, "childTextElement"); });
全てのソースコード
using Oxide.Game.Rust.Cui;
using UnityEngine;
namespace Oxide.Plugins
{
[Info("Basic concepts of GUI", "Unknown Author", "0.1.0")]
[Description("Basic GUI concepts such as anchors, offsets, etc.")]
class BasicConceptsOfGUI : RustPlugin
{
void Init()
{
}
[ChatCommand("gui")]
void GUICommand(BasePlayer player, string command, string[] args)
{
var imgComp = new CuiImageComponent
{
Color = "0.753 0.753 0.753 1", // silver: #c0c0c0
FadeIn = 1.0f
};
var txtComp = new CuiTextComponent
{
Text = "Hello World!",
Color = "0 0 0 1", // black: #000000
FadeIn = 1.0f,
Align = TextAnchor.MiddleCenter,
FontSize = 24
};
var rectComp = new CuiRectTransformComponent
{
AnchorMin = "0.2 0.8",
AnchorMax = "0.8 0.95"
};
var imgElem = new CuiElement
{
Name = "parentImageElement",
Parent = "Hud",
FadeOut = 1.0f,
};
imgElem.Components.Add(imgComp);
imgElem.Components.Add(rectComp);
var txtElem = new CuiElement
{
Name = "childTextElement",
FadeOut = 1.0f,
};
txtElem.Components.Add(txtComp);
txtElem.Components.Add(rectComp);
var elements = new CuiElementContainer();
elements.Add(txtElem);
elements.Add(imgElem);
CuiHelper.AddUi(player, elements);
timer.Once(5.0f, () =>
{
CuiHelper.DestroyUi(player, "parentImageElement");
CuiHelper.DestroyUi(player, "childTextElement");
});
}
}
}