Help us understand the problem. What is going on with this article?

UnrealEnginePython プラグインを使ってみた2 (Slate編)

More than 1 year has passed since last update.

はじめに

前回の 導入編 の続き。
今回は主に Editor 拡張等で使用できる機能に関してテストコード書いてみる。

ダイアログ

まずは簡単なところでダイアログから。

TestDialog.py
import unreal_engine as ue

def popup_dialog():
    # ダイアログを開く(APP_MSG_TYPE_YES_NO: YES/NOダイアログ)
    result = ue.message_dialog_open(ue.APP_MSG_TYPE_YES_NO, 'Grayちゃんはかわいい?')
    if result == ue.APP_RETURN_TYPE_YES:
        # APP_RETURN_TYPE_YES: 「はい」を選択した場合
        ue.log('かわいい!')
    elif result == ue.APP_RETURN_TYPE_NO:
        # APP_RETURN_TYPE_NO: 「いいえ」を選択した場合
        ue.log('やり直し')
        popup_dialog()

popup_dialog()

image.png

「はい」を肯定させるまで無限 Gray ちゃん。

ダイアログタイプは、UE4 における EAppMsgType と全く同じものがすべて用意されている。
また、同様に、返り値のタイプもUE4 における EAppReturnType と全く同じなので、UE4 での書き方さえ知っていれば直感的に書ける。

Slate

比較的機能が充実している。
C++ で Slate を書く場合、結構面倒だったりするが、これが Python のみで書けるのは楽ちん。

TestSlate.py
import unreal_engine as ue
from unreal_engine import SWindow, SButton, STextBlock, SMultiLineEditableText, SVerticalBox, SHorizontalBox, SPythonEditorViewport
from unreal_engine.enums import EHorizontalAlignment, EVerticalAlignment, ECheckBoxState
from unreal_engine.classes import Actor, SceneComponent, StaticMeshComponent, StaticMesh
from unreal_engine import FVector

# EditableText 作成
editor = SMultiLineEditableText()
# TextBlock 作成
text = STextBlock()
# ボタン作成
button = SButton()

def clicked_button():
    ue.log('ボタンが押された')
    text.set_text(editor.get_text())
    return True

# HorizontalBox 作成
h_box = SHorizontalBox()
# VerticalBox 作成
v_box = SVerticalBox()

# エディタにデフォルトのテキストセットして、VerticalBox に追加
editor.set_text('自由に入力してね!')
v_box.add_slot(editor)

# ボタンのクリック時のコールバックに clicked_button を指定
# VerticalBox に追加
button.set_content(STextBlock().set_text('テキストをコピー'))
button.set_h_align(EHorizontalAlignment.HAlign_Center)
button.set_v_align(EVerticalAlignment.VAlign_Center)
button.bind_on_clicked(clicked_button)
v_box.add_slot(button)

# テキストボックスを VerticalBox に追加
v_box.add_slot(text)

# VirticalBox を HorizontalBox に追加
h_box.add_slot(v_box)

# ビューポートを HorizontalBox に追加
viewport = SPythonEditorViewport()
h_box.add_slot(viewport)

# ボールのメッシュをビューポートのワールドにスポーン
world = viewport.get_world()
actor = world.actor_spawn(Actor);
root_comp = actor.add_actor_root_component(SceneComponent, 'Root');
mesh_comp = actor.add_actor_component(StaticMeshComponent, 'StaticMesh', root_comp);
mesh_comp.StaticMesh = ue.load_object(StaticMesh, '/Engine/VREditor/BasicMeshes/SM_Ball_01');
actor.set_actor_location(FVector(200.0, 0.0, 0.0));

# ウインドウに HorizontalBox をセット
window = SWindow().resize(640, 480).set_title('すれーとてすと')
window.set_content(h_box)

実行結果。

image.png

左側は、MultiLineEditableText のテキストを編集して真ん中のボタンを押すと、下の TextBox にコピーされる。
右側のビューポートは、ブループリントエディタやレベルエディタのビューポートと同じもの。
わずか数行の python コードで簡単に作れてしまう。

image.png

negimochi
ゲームのプログラマしてます。
http://negimochi.work/
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした