6
9

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

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

Last updated at Posted at 2017-09-27

はじめに

前回の 導入編 の続き。
今回は主に 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

6
9
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
6
9

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?