profile picture

Rust プラグインの基本的な GUI を実装する

Published on 2024/09/01
Tags game rust mod plugin oxide

概要

Rust プラグインの基本的な GUI を実装し、チャットコマンドを実行すると文字を表示します。

参考情報

関連情報

環境

GUI の実装

チャットコマンド gui を実行すると Hello World! を 5 秒間表示するプラグインを実装します。

  1. 背景のコンポーネントを実装します。Color は正規化された RGBA で指定します。

    var imgComp = new CuiImageComponent
    {
        Color = "0.753 0.753 0.753 1",  // silver: #c0c0c0
        FadeIn = 1.0f
    };
    
  2. 文字のコンポーネントを実装します。

    var txtComp = new CuiTextComponent
    {
        Text = "Hello World!",
        Color = "0 0 0 1",  // black: #000000
        FadeIn = 1.0f,
        Align = TextAnchor.MiddleCenter,
        FontSize = 24
    };
    
  3. 位置のコンポーネントを実装します。Anchor は幅と高さを 0.0 (0%) から 1.0 (100%) までのパーセント (%) で表す数値です。Min 値はの左下隅の位置で、Max は右上隅の位置です。

    var rectComp = new CuiRectTransformComponent
    {
        AnchorMin = "0.2 0.8",
        AnchorMax = "0.8 0.95"
    };
    
  4. 背景の要素を実装します。Parent は レイヤー を指定します。

    var imgElem = new CuiElement
    {
        Name = "parentImageElement",
        Parent = "Hud",
        FadeOut = 1.0f,
    };
    imgElem.Components.Add(imgComp);
    imgElem.Components.Add(rectComp);
    
  5. 文字の要素を実装します。

    var txtElem = new CuiElement
    {
        Name = "childTextElement",
        FadeOut = 1.0f,
    };
    txtElem.Components.Add(txtComp);
    txtElem.Components.Add(rectComp);
    
  6. CuiElementContainer に要素を追加します。

    var elements = new CuiElementContainer();
    elements.Add(txtElem);
    elements.Add(imgElem);
    
  7. 実装した GUI をプレイヤーに送信します。

    CuiHelper.AddUi(player, elements);
    
  8. 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");
            });
        }
    }
}