凛(kagring)のUE4とUnityとQt勉強中ブログ

2016 年から UE4 を触り始めました。勉強したもののメモ用のブログです。C++ での Qt、Unity も少しあります。

2016年06月 | ARCHIVE-SELECT | 2016年08月

| PAGE-SELECT | NEXT

≫ EDIT

UE4 値が補完されるCSVファイルを使う(Curve Table、Evaluate Data Table Row)

UE4でCSVファイルを扱うのですが、
今回は間を補完してくれる Curve Data Table というデータテーブルの使い方です。
Float型のデータのみですが、固定、線形、曲線補完をした状態でデータを取得できます。

詳しい説明は historia さんのこのページを見ていただければと!

・[UE4] CSVデータを扱う方法 CurveTable編
http://historia.co.jp/archives/1067

今回はFloat型のデータのみなので、構造体を用意する必要はありません。
こんな感じのデータを用意してみました。
CurveTable005.jpg
値はFloat型のみで、各行に名前をつけています。

これをインポートします。
インポートするとこういったダイアログがでますので「Curve Table」を選択します。
CurveTable000.jpg
「カーブの補完タイプを選択」では補完の種類を選択します。
「Constant」は補完はせず、次の値との補完はせず、前の値そのままを取得できます。

CurveTable001.jpg
「Linear」は線形補完です。

CurveTable002.jpg
「Cubic」は曲線補完となります。

用途に合わせて使い分けましょう。
インポートしたファイルをダブルクリックするとデータテーブルの中身を見ることができます。
CurveTable003.jpg
こんな感じですね。
データを見てみると自動で必ず0が挿入されるのかもしれません。

このデータをブループリントを使って取得します。
CurveTable004.jpg
「Evaluate Data Table Row」ノードを使います。
「Curve Table」にはデータテーブルを指定します。
「Row Name」には行の名前を。
「in XY」には取得したい値を指定します。
この「in XY」の値がデータテーブルに記述した値の間にある場合は、
インポート時に指定した補完方法に基づいて補完された値を取得することが出来ます。

この機能はパラメータの成長データとかに使えそうな気もしますね。
スポンサーサイト

| UE4 | 03:35 | comments:0 | trackbacks:0 | TOP↑

≫ EDIT

UE4 CSVファイルを使う(Data Table、Get Data Table Row 構造体、Break 構造体)

UE4でCSVファイルを扱う方法です。

詳しい説明は historia さんのサイトが参考になります!

・[UE4] CSVデータを扱う方法 DataTable編
http://historia.co.jp/archives/779

さて、UE4でCSVファイルを扱う方法は
「Data Table」と「Curve Table」の二種類があるようです。

DataTableはデータの構造をfloat, int, bool, stringなどの組み合わせで自由にカスタマイズすることができ、
CurveTableはfloat型のみの対応ですが、データ間を自動で補間してくれるため、難易度の調整などに役立ちます。

とのことなので、今回は純粋なデータである「Data Table」を使おうと思います。

まずは、CSVで扱う用の構造体を定義します。
CSV002.jpg
こんな感じですね。

あとは、この構造体にあったCSVファイルを用意します。
CSV001.jpg

こちらもこんな感じのファイルになります。
一番上の行はメンバ変数名を記述するようです。
2行目以降の各行の最初は行の名前をつけるようにします。
なので、1列目の1行目は空白、2行目以降は行データの名前になります。

あとはこのCSVファイルをインポートします。
コンテンツにCSVファイルをドロップすると以下のようなウィンドウがでます。
CSV005.jpg
このCSVファイルをどの構造体に割り当てるかの選択がでるので
「データテーブルの列の種類を選択」のところを、先ほど作った構造体を指定しましょう。

そうすると無事インポートが完了し、
データテーブルをダブルクリックすると中身にデータがインポートされていることがわかります。
CSV003.jpg

余談ですが、構造体の中に構造体がある場合のCSVの定義方法は
(メンバ変数名=値)
といった風に記述するようですね。
ベクトルであれば「"(X=1.0,Y=2.0,Z=3.0)"」こんな感じになります。

ベクトルメンバのCSVの書き方はここを参考にしました。

・Importing Vectors into Data Tables
https://answers.unrealengine.com/questions/177653/importing-vectors-into-data-tables.html

あとは、ブループリントでこのデータテーブルを扱います。
「Get Data Table Row」ノードの値に作成したデータテーブルを指定します。
CSV000.jpg
Row Name には各行につけた行の名前を指定します。
そして、各メンバ変数にアクセスするには「Break 構造体名」ノードを使います。
これで色々そのメンバにアクセスすることができました。

ゲームを作るには外部で作成したテーブルを使うことが多いので、
静的なデータとしてはこの機能があれば十分そうですね。

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

≫ EDIT

UE4 UMGの基本を覚えたら

UMGの機能の基本を覚え終えた後は、
マテリアルなどをつかった実際のUI作りについてやっていかないといけません。
ということでとても参考になるサイトさんがあったのでメモです。

・みつまめ杏仁
http://limesode.hatenablog.com/
実際にゲームで使うような形でのテクニックを紹介されています。
マテリアルをばりばり使っているので覚えられれば色々応用もききそうです。

・非現実的な話
http://meganeo.blog.shinobi.jp/ue4/%E3%80%90ue4%E3%80%91umg%E3%82%92%E4%BD%BF%E3%81%A3%E3%81%9Fui%E3%81%AE%E5%AE%9F%E8%A3%85%EF%BC%8B%20-%E5%AE%9F%E8%A3%85%E7%B7%A8-
FF7のバトル風のUIを実装する方法を説明されています。

・UE4 UMGで入力を取得する
http://katze.hatenablog.jp/entry/2016/05/09/164718
UMGでマウス以外の入力を受け付けて制御する方法について書かれています。
スマホなど以外の実際のゲームだと、マウスだけというのはあまりないので
おそらくこういった方法になるのかなと思います。
自分も外部で入力を受け取って制御するといったほうがわかりやすいかなと思ってます。

他にも何か見つけたら追加していこうと思います。

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

≫ EDIT

UE4 Actor(アクター)の相対移動と相対回転(Add Actor Local Offset、Add Actor Local Rotation)

Actor(アクター)を現在向いてる方向からの相対移動と相対回転の機能です。

現在向いてる方向からの相対移動は「Add Actor Local Offset」ノードを使います。
ローカル移動回転000
使い方は「Set Actor Location」と同じですね。
挙動の違いとしては、アクターの現在の位置からの移動で、Rotationに合わせた移動値となります。

現在向いてる方向からの相対回転は「Add Actor Local Rotation」ノードを使います。
ローカル移動回転001
使い方は「Set Actor Rotation」と同じですね。
こちらも挙動の違いとしては、アクターの現在の回転からの回転値となります。
5.0 にすると、今の回転値に5.0足した値になる感じですね。

ここらへん使う機会は結構ありそうなので覚えておくとよさそうです。
一応、ヘルプの説明文を見ると、
「Set Actor Relative Location」ノードや
「Set Actor Relative Rotation」ノードというものがあるのですが、
使ってみても挙動がいまいちよくわからないのですよね。

ここらへん詳しく書いてあるページがあったのでぺたり。

・妹、相対的に考える
http://imoue.hatenablog.com/entry/2015/08/06/213754

上記のページをみつつ、そのうち試してみようかと思います。

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

≫ EDIT

UE4 UMGでムービー(動画)を再生する

UMGを使ってムービー(動画)を再生する方法です。

詳しい説明はこちらを参考に。

・Media Framework
https://docs.unrealengine.com/latest/JPN/Engine/MediaFramework/index.html

まずはコンテンツに動画ファイルを追加します。
動画ファイルをドロップします。
動画再生000
mp4ファイルはダメだったのでとりあえずaviファイルにしてみました。

この際、動画のあるパスが「Content/Movies」フォルダにないとうまくいかないので注意しましょう。
動画再生003
あらかじめ「Movies」フォルダを作成して、その中に動画ファイルをコピーしてから
コンテンツに追加するとうまくいきました。

次に、メディアテクスチャを作成します。
コンテンツに追加した動画アセットを右クリックして
「Create Media Texture」を選択します。
動画再生001
これでメディアテクスチャができました。

このメディアテクスチャからマテリアルを作成します。
コンテンツに追加されたメディアテクスチャアセットを右クリックして
「Create Material」を選択します。
動画再生002
これでマテリアルが作成されました。

あとは、UMGのイメージパーツに対してこのマテリアルを適用してあげます。
その際、作成したマテリアルはUMG用(ユーザーインターフェース)になっていないので注意しましょう。
動画再生004
こんな感じでマテリアルをUMG用に設定しましょう。

次に再生するブループリントを作成します。
まずは「Media Player」変数を作成して、デフォルト値に再生したい動画を設定します。
動画再生005

あとは、その変数を使って「Play」ノードを実行してあげます。
動画再生006

これで無事動画が再生されました。
動画再生007

手順は結構多くて複雑に見えるのですが、やってみると案外簡単でした。
動画再生はゲームを作っていくと使う場面もあるのでこのまま使えそうですね。

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

≫ EDIT

UE4 カメラの方向を常に向くActor(アクター)(Find Look at Rotation)

アクターを常にカメラの方向を向くビルボードとして扱う方法です。

こちらを参考にさせていただきました。

・ターゲットに対してビルボード処理する(4.7.6)
http://stepism.sakura.ne.jp/ue4/wiki/doku.php?id=wiki:ue4:tips:505

UE4には「Find Look at Rotation」というノードがあります。
アクタービルボード002
これは「Start」から「Target」に向かうベクトルの方向を向く回転値を
算出して返すというノードのようです。

ドキュメントはこちらに。

・Find Look at Rotation
https://docs.unrealengine.com/latest/INT/BlueprintAPI/Math/Rotator/FindLookatRotation/index.html

これを使ってビルボードを実現します。
アクターの位置とカメラの位置をこの「Find Look at Rotation」に渡します。
アクタービルボード001
こうすることで、カメラの方向をアクターが向くようになります。

この回転値をアクターに毎フレームセットすることで
アクターのビルボードが実現できました。
アクタービルボード000

こうやってみると結構うまくいった感じがしましたが、
カメラにかなり近くなると、カメラの方向を向いてしまうため結構不自然な感じになります。
これはカメラの面を向くようにするのが正解のような気がするので改良が必要ですね…。

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

≫ EDIT

UE4 Actor(アクターに)BP(ブループリント)を追加する

BPが割り当てられていないアクターにBPを追加する方法です。

まずはアクターを配置しましょう。
アクターBP追加000
何でもよいのでとりあえず選択して配置します。
これって名称アクターっであってるんですかね…。
と思ったらアクター=ゲームオブジェクトであってるのかな?

そうしたら、そのアクターを選択して詳細タブからブループリント~を選択しましょう。
アクターBP追加001

そのあと、ブループリント名に任意の名前を付けて、
「ブループリントを作成」を選択します。
アクターBP追加002

ブループリントを開くとこんな感じの画面が表示されます。
アクターBP追加003
あとはイベントグラフにタブを切り替えて自由にブループリントを書くだけです。

といった感じですね。
既存のものを割り当てたりもできるのですかねこれって。

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

≫ EDIT

UE4 デバッグカメラを使う(ToggleDebugCamera)

ゲームを動かしているときに表示がおかしかったりして、
背景の特定の場所をカメラで映してチェックしたいといったことがあるとおもいます。
そういう場合、デバッグ用のカメラを作って切り替えられるようにしないといけないのですが
UE4 ではデバッグカメラがあらかじめ用意されています。

まず、ゲームを実行します。
デバッグカメラ000
こんな感じに実行されます。
キャラクターにカメラが紐づいています。

これをデバッグカメラに切り替えるには、
コンソールコマンドで「ToggleDebugCamera」と入力します。

そうすると、デバッグカメラに切り替わります。
デバッグカメラ001
こんな感じですね。
デバッグカメラの情報が表示されると同時に、エディタと同じようにカメラを動かすことが出来ます。

元に戻す場合は、再びコンソールコマンドで「ToggleDebugCamera」と入力します。

動いている状態で切り替えるとゲームが進んでしまうので、
一時停止をしてからデバッグカメラに切り替えるのが良いかもしれないですね。

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

≫ EDIT

UE4 カメラ情報の取得(Get Player Camera Manager、Get Camera Location、Get Camera Rotation、Get FOVAngle)

現在のカメラの情報を取得する方法です。

今回は「Get Player Camera Manager」というノードを使って
「Player Camera Manager」を取得して、カメラのパラメータを取得していきます。

公式ドキュメントはこちら。

・カメラ
https://docs.unrealengine.com/latest/JPN/Gameplay/Framework/Camera/index.html

それと、こちらのサイトも参考にさせていただきました。

・UE4 + Oculus Riftで、カメラのワールド座標を取得する方法
http://pafuhana1213.hatenablog.com/entry/2015/07/31/010101

まずはカメラの位置を取得するため「Get Camera Location」ノードを使います。
カメラ情報000
「Player Camera Manager」からつなぐだけですね。

次に回転を取得するため「Get Camera Rotation」ノードを使います。
カメラ情報001
こちらも Location と同じです。

最後に、画角(FOV)を「Get FOVAngle」ノードを使って取得します。
カメラ情報002

と、こんな感じでカメラの情報を取得できました。
なにか他に方法がありそう(自分で作った場合など)なのでそれはまた別の機会にでも。

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

≫ EDIT

UE4 アクターの回転を取得したりセットしたり(Get Actor Rotation、Set Actor Rotation、Set Actor Location And Rotation)

Actor(アクター)の回転を取得したり、回転をセットしたりする方法です。
注意することはいくつかありますが、素直にノードをつなぐだけでできます。

回転を取得するには「Get Actor Rotation」ノードを使います。
アクター回転関係000
「Rotator」型で取得することができます。

回転をセットするのは「Set Actor Rotation」ノードを使います。
アクター回転関係001
これもセットする回転を入力するだけですね。

公式ドキュメントはこちらに。これも英語しかない…。

・SetActorRotation
https://docs.unrealengine.com/latest/INT/BlueprintAPI/Utilities/Transformation/SetActorRotation/index.html

それと、位置のセットと回転のセット両方を同時に行う「Set Actor Location And Rotation」
というノードもあります。
アクター位置関係002
キャラクターの位置や回転をリセットしたい場合などは
同時に行えるのでこっちを使うほうがよさそうですね。

それと、上記 Set 系の関数ですが、「Capsule Component」や「Transform」の
詳細設定の「Mobility(可動性)」が「Static(スタティック)」になっている場合は
処理が効かないので注意しましょう。
「Movable(ムーバブル)」に設定することで、ノードの処理が有効になります。
アクター位置関係003

移動と同じく Set 系の部分だけひとつ注意点がある感じですね。

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

| PAGE-SELECT | NEXT