fc2ブログ

凛(kagring)のUE5/UE4とゲーム制作と雑記ブログ

2016 年から UE4 / 2021年から UE5 を触り始めました。勉強したもののメモ用ブログです。ゲーム制作に関するメモや雑記とか色々あります。C++ での Qt、Unity もほんの少しあります。

2016年11月 | ARCHIVE-SELECT | 2017年01月

| PAGE-SELECT | NEXT

≫ EDIT

UE4 オブジェクトがカメラ内におさまるようにフォーカスさせる(Fキー)

選択しているアクターやオブジェクトを
エディタのカメラ内にいい感じにフォーカスしておさめる方法です。

下記サイトを参考にメモ。

・UE4 エディタ⑥ オブジェクトを動かす
http://manabibeya.com/ue4tutorial/editor/editor6/

★オブジェクトをクローズアップする方法 (0:20)
スロー (たとえば、コンテンツ ブラウザからSM_Chairをビューポートにドラッグアンドドロップしてから) そのオブジェクトを選択(左クリック) → Fキーを押す


という感じで普通にオブジェクトを選択して「F」キーでオブジェクトにカメラをフォーカスすることができます。
ズームだけだと近寄れない場合があったりするのでかなり使う機能かなと思います。

まずはオブジェクトを選択します。
フォーカス000
この状態だとカメラからみて遠くの位置にオブジェクトがあります。

「F」キーを押すとカメラ内にオブジェクトの全体が収まるようにフォーカスされます。
フォーカス001
カメラがいい感じに近づきました。

これも結構使いそうな機能ですね。
上記サイトにのっているこの動画でいろいろ説明がされているようなので参考にするのがよいかもです。

| UE4 | 18:22 | comments:0 | trackbacks:0 | TOP↑

≫ EDIT

UE4 オブジェクトを地面に設置させる(Endキー)

アクターやオブジェクトをつかんでいる場合に、
現在いる上下の位置を地面に接地させる方法です。

下記サイトを参考にメモ。

・UE4 エディタ⑥ オブジェクトを動かす
http://manabibeya.com/ue4tutorial/editor/editor6/

★空中にあるオブジェクトをフロアに降ろす方法 (1:58)
スロー そのオブジェクトが選択されている状態でキーボードのEndキーを押す


という感じで普通にオブジェクトを選択して「End」キーでオブジェクトを接地することができます。

まずはオブジェクトを選択して
接地000

「End」キーを押すと地面に接地されます。
接地001

結構使いそうな機能ですね。
上記サイトにのっているこの動画でいろいろ説明がされているようなので参考にするのがよいかもです。

| UE4 | 17:18 | comments:0 | trackbacks:0 | TOP↑

≫ EDIT

UE4 エディタ拡張・ウィジェット共通アトリビュート(IsEnable、ToolTipText、Visibility)

ウィジェットについて調べていて、
どうも共通のアトリビュートがあるようなのでメモです。

と思ったらこちらの公式ページにまとめられているようでした。

・スレート ウィジェットの例・共通のスレート引数
https://docs.unrealengine.com/latest/JPN/Programming/Slate/Widgets/index.html#共通のスレート引数

エンジンのソースとにらめっこしてました…。

~省略
+ SVerticalBox::Slot()
.AutoHeight()
[
SNew(SButton)
.IsEnabled(false)
.Text(LOCTEXT("ButtonText", "SButton"))
.ToolTipText(LOCTEXT("ButtonToolTipText", "ツールチップテキスト"))
.Visibility(EVisibility::Hidden)
]
~省略


とりあえず普通に表示するとこんな感じに。
SCommon006.png
レイアウトを縦に並べてボタンを表示しています。
(ボタン・ボタン・チェックボックスの順に配置しています)

・IsEnable
ウィジェットの有効状態を切り替えます。bool 型で指定します。
表示はされるけどウィジェットの動作を無効にしたい場合に使います。
SCommon000.png

・ToolTipText
ツールチップによるヒントの表示をするためのテキストを指定します。
FText で指定します。
SCommon001.png
これはヘルプとして結構便利そうですね。

・Visibility
ウィジェットの表示・非表示関係の設定を行います。
EVisibility 型で指定をします。
ちょっとここはいくつかパターンがあるので少し詳しくメモ。

EVisibility::Visible
Default widget visibility - visible and can interactive with the cursor
普通の表示状態です。すべてのイベントを受け取ることができます。
SCommon006.png

EVisibility::Hidden
Not visible, but occupies layout space. Not interactive for obvious reasons.
ウィジェットを非表示状態にします。イベントを受け取ることができません。
非表示にした際、レイアウトは変更されずそのままになります(空白)
SCommon002Hidden.png

EVisibility::Collapsed
Not visible and takes up no space in the layout; can never be clicked on because it takes up no space.
ウィジェットを非表示状態にします。イベントを受け取ることができません。
非表示にした際、そのウィジェットの分詰めてレイアウトが変更されます。
SCommon003Corapse.png

EVisibility::HitTestInvisible
Visible to the user, but only as art. The cursors hit tests will never see this widget.
ウィジェットを表示されますが、イベントを受け取ることがありません。
SCommon004HitTestInvisible.png

EVisibility::SelfHitTestInvisible
Same as HitTestInvisible, but doesn't apply to child widgets.
HitTestInvisible と同じですが、自分自身にだけ適用され、子ウィジェットには適用されません。
SCommon005SelfHitTestInvisible.png

まだまだありそうですが、とりあえず使いそうなものをメモってみました。

| UE4 | 16:17 | comments:0 | trackbacks:0 | TOP↑

≫ EDIT

UE4 エディタ拡張・エディタブルテキストボックス(テキストボックス)ウィジェット(SEditableTextBox)

エディタブルテキストボックスウィジェットについてのメモです。
他ではよく「テキストボックス」と呼んでいるコントロールですね。
UE4ではラベルのことをテキストブロックと呼び
中身を変更できるものを「エディタブルテキストボックス」としているみたいですね。

ロジカルビートさんのこのページとエンジンのソースとにらめっこしていました。
ロジカルビートさんはインプットボックスと呼んでいるようです。

【UE4】エディタ拡張(インプットボックス編)
http://logicalbeat.jp/blog/875/

エディタブルテキストボックスを使うには「SEditableTextBox」クラスを使います。

~省略
+SVerticalBox::Slot()
.AutoHeight()
[
SNew(SEditableTextBox)
.Text(LOCTEXT("EditText", "SEditableTextBox。初期テキストだドン"))
.HintText(LOCTEXT("HintText", "ヒントテキスト"))
.Font(FSlateFontInfo("Veranda", 16))
.Padding(FMargin(8, 8, 8, 8))
.ForegroundColor(FSlateColor(FLinearColor(1.0f, 0.0f, 1.0f, 1.0f)))
.BackgroundColor(FSlateColor(FLinearColor(1.0f, 1.0f, 0.0f, 1.0f)))
//.IsReadOnly(true)
//.ReadOnlyForegroundColor(FSlateColor(FLinearColor(0.0f, 1.0f, 1.0f, 1.0f)))
//.IsPassword(true)
.SelectAllTextWhenFocused(true)
.RevertTextOnEscape(true)
.ClearKeyboardFocusOnCommit(false)
.IsCaretMovedWhenGainFocus(true)
.OnTextCommitted_Raw(this, &FUtilityModule::OnEditableTextBoxCommited)
.OnTextChanged_Raw(this, &FUtilityModule::OnEditableTextBoxCommited, ETextCommit::Default)
]
~省略
void FUtilityModule::OnEditableTextBoxCommited(const FText& InText, ETextCommit::Type InCommitType) const
{
switch(InCommitType){
case ETextCommit::Default:
break;
case ETextCommit::OnEnter:
UE_LOG(LogTemp, Log, TEXT("エンター"))
break;
case ETextCommit::OnUserMovedFocus:
UE_LOG(LogTemp, Log, TEXT("フォーカス移動"))
break;
case ETextCommit::OnCleared:
UE_LOG(LogTemp, Log, TEXT("クリア"))
break;
}
}


雑ですがこんな感じの記述になります。
結果はこんな感じに。
SEditableTextBox000.png

SEditableTextBox の各プロパティの機能はこんな感じになります。

・Text
エディタブルテキストボックスに最初に表示される文字列です。FText 型で指定します。
・HintText
エディタブルテキストボックスに何も文字列がない時に表示される文字列です。FText 型で指定します。
SEditableTextBox001.png
・Font
表示する文字列のフォントです。
FSlateFontInfo 型を使って、フォント名とフォントサイズを指定します。
・Padding
文字列を表示するときのマージン(スペース領域)を指定します。
FMargin 型で上下左右を指定します。
・ForegroundColor
表示する文字列の色です。
FSlateColor 型で指定します。
・BackgroundColor
文字列を表示するための背景の色です。
FSlateColor 型で指定します。
・IsReadOnly
読み取り専用にします。
SEditableTextBox003.png
・ReadOnlyForegroundColor
読み取り専用の時の文字の色を指定します。
と思ったのですが特に変わらず…。
・IsPassword
文字列をそのまま表示せず記号で表示します。
SEditableTextBox002.png
・SelectAllTextWhenFocused
エディタブルテキストボックスにフォーカスが移った時に
文字列を全選択状態にします。
・RevertTextOnEscape
編集中にエスケープキーを押した場合に編集前の状態に戻します。
・ClearKeyboardFocusOnCommit
デフォルトではエンターを押したときにETextCommit::OnClearedメッセージが投げられるようなのですが
false にすることで ETextCommit::OnCleared は投げられなくなります。
(ETextCommit::OnEnter のみの通知になる)
・IsCaretMovedWhenGainFocus
良くわからなかったので公式ドキュメント
・SEditableTextBox::FArguments::IsCaretMovedWhenGainFocus
https://docs.unrealengine.com/latest/INT/API/Runtime/Slate/Widgets/Input/SEditableTextBox/FArguments/IsCaretMovedWhen-/index.html
この内容を翻訳したところ

自動補完が終了したときにフォーカスを失うための回避策。

となりました。
デフォルトがtrueなのでそのままの方がよさそうです。
・OnTextCommitted
テキストが決定(キャンセル、フォーカス移動を含む)された時に通知される関数を登録します。
・OnTextChanged
テキストが変更された時に通知される関数を登録します。
OnTextCommitted と同じ関数を登録することできます。

通知の関数のコミットタイプは
・ETextCommit::Default
通常の通知。今回ではテキスト編集中に文字列を変更したタイミングごとに通知される。
・ETextCommit::OnEnter
エンターキーで決定したときに通知される。
・ETextCommit::OnUserMovedFocus
フォーカスが移動したときに通知される。
・ETextCommit::OnCleared
エスケープキーなどでクリアしたときに通知される。

といった感じでしょうか。
思ったより機能が盛りだくさんでしたが、入力系統の一つとして結構使うんじゃないでしょうか。

| UE4 | 15:46 | comments:0 | trackbacks:0 | TOP↑

≫ EDIT

UE4 エディタ上のビューポートをゲームビューに切り替え、アクタアイコンなどを非表示にして実際のゲームに近い表示でみる(Gキー)

UE4のエディタ上でビューポートを実際に動かしたときと同じような見え方にする方法です。
これはゲームビューと呼ばれるようです。

・ゲーム ビュー
https://docs.unrealengine.com/latest/JPN/Engine/UI/LevelEditor/Viewports/Basics/index.html#ゲームビュー

ゲームビュー は、ゲーム内で表示されるのと同様にシーンをビューポートに表示させます。つまり、アクタ アイコンなどのエディタ固有の要素は、 全く表示されません。ゲームビューは、ゲーム内で実行した場合に、レベルがどのように見えるかを 確認する簡単な方法を提供します。


この切り替え自体はビューポートオプションで切り替えることができます。
ゲームビュー002

ショートカットキーとして「Gキー」を押すことでも切り替えることができます。

というわけでエディタ上のこういった表示が
ゲームビュー000

ゲームビューに切り替えることでこんな感じに表示されます。
ゲームビュー001

スクリーンショットを撮ったり、実際のゲームでの配置物とかみるのはこのビューの方がよさそうですね。

追記。

詳細の「Actor Hidden In Game」にチェックを入れていると
このゲーム中に非表示になりますが、このゲームビューのときにも非表示になるので
いろいろと確認しやすいかもしれません。
アウトライン002
このプロパティですね。

| UE4 | 16:56 | comments:0 | trackbacks:0 | TOP↑

≫ EDIT

UE4 エディタ拡張・ボタンウィジェット(SButton)

ボタンウィジェットについてのメモです。

ロジカルビートさんのこのページとエンジンのソースとにらめっこしていました。

・【UE4】エディタ拡張(ボタン編)
http://logicalbeat.jp/blog/805/

ボタンウィジェットを使うには「SButton」クラスを使います。

~省略
SNew(SVerticalBox)
+ SVerticalBox::Slot()
.AutoHeight()
[
SNew(SButton)
//.IsEnabled(false)
.Text(LOCTEXT("ButtonText", "SButton。押したら何かが起きる"))
.ButtonColorAndOpacity(FSlateColor(FLinearColor(1.0f, 1.0f, 0.0f, 1.0f)))
.ForegroundColor(FSlateColor(FLinearColor(1.0f, 0.0f, 1.0f, 1.0f)))
.ContentPadding(FMargin(16, 16, 16, 16))
.OnClicked_Raw(this, &FUtilityModule::OnClickedButton)
]
~省略
FReply FUtilityModule::OnClickedButton()
{
return FReply::Handled();
}


雑ですがこんな感じの記述になります。
結果はこんな感じに。
SButton000.png

SButton の各プロパティの機能はこんな感じになります。

・Text
ボタンに表示される文字列です。FText 型で指定します。
・ButtonColorAndOpacity
ボタンの色です。
FSlateColor 型で指定します。
・ForegroundColor
表示する文字列の色です。
FSlateColor 型で指定します。
・ContentPadding
ボタンの文字列を表示するときのマージン(スペース領域)を指定します。
FMargin 型で上下左右を指定します。
・OnClicked
ボタンをクリックしたときの関数を指定します。
今回は自分自身を渡しているので Raw の名前の関数を使っています。

ボタンを無効にしたい場合は「IsEnable」のプロパティを使って下さい。

・IsEnabled
ボタンの有効無効を切り替えます。
bool 型で指定します。

だいたいこれぐらいのプロパティがあればやりたいことができるかなと。
他にも「Method」系のものがあるっぽいので、ここらへんはおいおいということで。

| UE4 | 14:15 | comments:0 | trackbacks:0 | TOP↑

≫ EDIT

UE4 エディタ拡張・テキストブロック(ラベル)ウィジェット(STextBlock)

テキストブロックウィジェットについてのメモです。
他ではよく「ラベル」と呼んでいるコントロールですね。

ロジカルビートさんのこのページとエンジンのソースとにらめっこしていました。

・【UE4】エディタ拡張(ラベル編)
http://logicalbeat.jp/blog/733/

テキストブロックウィジェットを使うには「STextBlock」クラスを使います。

FText WidgetText = FText::Format(
LOCTEXT("WidgetText", "STextBlock。コミケまであと {0}日と{1}時間{2}分\nどうもFText::Formatは引数が4つまでしかいけなさそう。\n文字列操作にはFStringを使おう!"),
FText::FromString(FString::FromInt(Days)),
FText::FromString(FString::FromInt(Hours24)),
FText::FromString(FString::FromInt(Minutes))
);
~省略
SNew(SVerticalBox)
+ SVerticalBox::Slot()
.AutoHeight()
[
SNew(STextBlock)
.Text(WidgetText)
.Font(FSlateFontInfo("Veranda", 16))
.ColorAndOpacity(FSlateColor(FLinearColor(1.0f, 1.0f, 0.0f, 1.0f)))
.ShadowOffset(FVector2D(2.0f, 2.0f))
.HighlightColor(FLinearColor(0.0f, 1.0f, 1.0f))
.HighlightText(LOCTEXT("HighlightText", "FText::Format"))
.AutoWrapText(true)
.Margin(FMargin(16, 16, 16, 16))
.OnDoubleClicked_Raw(this, &FUtilityModule::OnDoubleClickedButtonLabel)
]
~省略
FReply FUtilityModule::OnDoubleClickedButtonLabel()
{
return FReply::Handled();
}

雑ですがこんな感じの記述になります。
結果はこんな感じに。
STextBlock000.png

STextBlock の各プロパティの機能はこんな感じになります。

・Text
表示文字列です。FText 型で指定します。
・Font
表示する文字列のフォントです。
FSlateFontInfo 型を使って、フォント名とフォントサイズを指定します。
・ColorAndOpacity
表示する文字列の色です。
FSlateColor 型で指定します。
・ShadowOffset
フォントにドロップシャドウを付ける場合のオフセット(xy)を指定します。
FVector2D 型で指定します。
・HighlightText
ハイライト扱いにする文字列を指定します。FText 型で指定します。
・HighlightColor
ハイライト時のカラーを指定します。FLinearColor 型で指定します。
・AutoWrapText
文字列がはみ出る時に自動で折り返すかの指定をします。
・Margin
文字列を表示するときのマージン(スペース領域)を指定します。
FMargin 型で上下左右を指定します。
・OnDoubleClicked
ダブルクリックしたときの関数を指定します。
今回は自分自身を渡しているので Raw の名前の関数を使っています。

何気にダブルクリックの反応を受け取れたのがよかったです。クリックは無理そうでしたが。
UE4のスレートでの文字列表示はほとんどこの STextBlock を使うので覚えると便利そうですね。

| UE4 | 15:34 | comments:0 | trackbacks:0 | TOP↑

≫ EDIT

UE4 カメラをエディタ操作中と同じように操作できるモードで実行する(Play In Editor と Simulate In Editor)

デフォルトのキャラクターコントローラーなどを使っていると、
カメラが付随してしまっているので、実行中にここを見たい!などをするのが難しくなります。
これをエディタ操作中と同じようなカメラで実行する方法です。

普通はこの「プレイ」ボタンで実行していると思います。
プレイボタン000
この状態を「Play In Editor」というみたいですね。

このプレイボタンの右にある三角ボタンを押します。
プレイボタン003

するとメニューが出てくるので「シミュレート」を押します。
プレイボタン001
これでエディタ操作時と同じカメラ操作で実行してみることができます。
これを「Simulate In Editor」というみたいです。
自由にカメラを動かせる代わりにプレイヤーの操作などはできなくなってしまうので注意です。

もとに戻す場合は「選択ビューポート」で実行します。
プレイボタン002
これがデフォルトの「Play In Editor」ですね。

この方法以外にも通常プレイ(Play In Editor)中に
エディタ操作プレイ(「Play In Editor)に変更する方法があります。

通常プレイ(Play In Editor)中に「イジェクト」ボタンを押します。
プレイボタン004
そうすると「Play In Editor」モードに変更されます。

この状態からもとの通常プレイ(Play In Editor)に戻す場合は
「乗っ取る」ボタンを押します。
プレイボタン005
これで「Play In Editor」モードに戻ります。

ここらへんは公式ドキュメントみるとよいかもです。

・エディタ内テスト (プレイ&シミュレート)
https://docs.unrealengine.com/latest/JPN/Engine/UI/LevelEditor/InEditorTesting/index.html

知らない機能とか結構まだまだありそうなので調べないとですね。

| UE4 | 16:24 | comments:0 | trackbacks:0 | TOP↑

≫ EDIT

UE4 実行(プレイ)中にマウスカーソルを表示してエディタを操作する(Shift + F1)

UE4で実行(プレイ)中にマウスカーソルを表示して
エディタを操作できるようにする方法です。

デフォルトのキャラクターコントローラーを使っている場合など、
実行(プレイ)をすると、プレイ中はマウスカーソルが消えます。
この状態だと、マウスの移動はカメラの回転などの機能に割り振られてしまい、
エディタを操作することができなくなってしまいます。

これを操作できるようにする方法です。

「Shift + F1」

これだけです!
これで、実行中の画面を動かしたまま
マウスカーソルが表示され、エディタが操作できるようになります。
もう一度ビューポートをクリックすると元通りのプレイ中に戻ります。

| UE4 | 15:49 | comments:0 | trackbacks:0 | TOP↑

≫ EDIT

UE4 文字列の扱い(FName、FText、FString)

UE4での文字列の扱いについてのメモです。
公式ドキュメントはこちら。

・文字列の取り扱い
https://docs.unrealengine.com/latest/JPN/Programming/UnrealArchitecture/StringHandling/index.html

UE4には以下の3つの種類の文字列の扱いがあるようです。

・FName
https://docs.unrealengine.com/latest/JPN/Programming/UnrealArchitecture/StringHandling/FName/index.html

FNames は、 コンテンツ ブラウザ で新規アセットに名前を付けたり、ダイナミック マテリアル インスタンスのパラメータを変更する場合、またはスケルタル メッシュのボーンにアクセスする時に使います。再利用する場合でも、所定の文字を一回だけデータ テーブルに格納するので、 非常に負荷の軽いシステムです。Fnames は大文字・小文字を区別しません。変更も操作もできません。Fnames はストレージ システムで静的な性質なので、 キーによる参照と Fnames へのアクセスが速いです。FNames サブシステムのもう 1 つの特徴は、文字列から Fname への変換をハッシュ テーブルで素早く行うことです。

FNames は大文字・小文字を区別せず、インデックスの組み合わせとしてユニークな文字列とインスタンス番号のテーブル内に格納されます。


・FText
https://docs.unrealengine.com/latest/JPN/Programming/UnrealArchitecture/StringHandling/FText/index.html

FText とは、「表示文字列」のことです。ユーザーに表示するテキストは、すべて FText で処理されます。FText クラスは、ローカリゼーション用にビルトインされたサポートです。 参照テーブルに格納されたローカライズ済みのテキスト コンテンツの処理に加えて、数、日付、時間、フォーマット済みテキストなどのランタイム時にローカライズされるテキストの処理も行います。ローカライズが必要ないテキストでさえも、 FText で処理が可能です。プレイヤー名などのユーザーが入力するコンテンツやスレートで表示されるテキストなどが含まれます。文字列を表示するために変更するというのは非常に危険な操作なので、Ftext には変更関数はありません。


・FString
https://docs.unrealengine.com/latest/JPN/Programming/UnrealArchitecture/StringHandling/FString/index.html

FName や FText と違って FString は操作可能な唯一の文字列クラスです。大文字小文字の変更、サブ文字列の引用、反転など、 様々な種類の文字列操作があります。FStrings は、検索や修正、他の文字列との比較を行うことが可能です。ただし、これらの操作をすると、FStrings の負荷は不変文字列クラスに比べてが大きくなります。


基本的に命名に使う場合は「FName」
表示文字列には「FText」
文字列操作は「FString」


といった感じでしょうか。
FText の扱いについてはちょっとまだ詳しくわかっていないので調べないとです。

| UE4 | 15:42 | comments:0 | trackbacks:0 | TOP↑

| PAGE-SELECT | NEXT