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

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

2017年04月 | ARCHIVE-SELECT | 2017年06月

| PAGE-SELECT | NEXT

≫ EDIT

UE4 カメラの画角(視野角)を変更する(Set Field Of View、Get Camera Component)

カメラの画角(視野角)を設定する方法です。

画角(視野角)の変更は「Set Field Of View」ノードを使います。
画角変更001
「Target」には「Camera Component」を指定します。カメラではないので注意。
「In Field Of View」には画角(視野角)を指定します。

結構簡単なのでこれだけなのですが、
入力の「Target」にはカメラではなく「Camera Component」の指定が必要なので注意して下さい。画角変更002
こんな感じで「Get Camera Component」ノードを使うことで
カメラから「Camera Component」を取得することができます。

というわけで実際に使う場合はこんな感じのBPになります。
画角変更000
カメラから「Camera Component」を取得して
「Set Field Of View」を呼ぶ。といった感じですね。簡単!

画角(視野角)によってモデルの見た目や、画面の見え方が変わるので
まずはじめに設定したいところではありますね。

カメラの作成でも触れましたが画角(視野角)の値についてはUE4とは関係ないですがこちらが参考になりそうです。
UE4だと水平画角になるのかなと。
自分がプログラムを組んでる値とは異なるので注意が必要かもです。

・3Dカメラの話
http://nomoreretake.net/2016/02/20/camera/
スポンサーサイト

| UE4 | 12:19 | comments:0 | trackbacks:0 | TOP↑

≫ EDIT

UE4 カメラを切り替える(Set View Target with Blend)

UE4 でカメラを切り替える方法です。
カメラを複数配置する方法はこちらに。

・カメラを配置する(Camera)
http://kagring.blog.fc2.com/blog-entry-293.html

この配置したカメラを時間指定などで切り替える方法です。
今回もこちらのサイトを参考にさせていただきました。

・UE4 ゲーム中にカメラ切り替えを行なう方法
http://unrealengine.hatenablog.com/entry/2015/09/26/215004

カメラを切り替えるには「Set View Target with Blend」ノードを使います。
カメラ切り替え005
「Target」には「PlayerController」を渡します。
作り方によってはこの入力はなくなることもあるみたいです。
「New View Target」には切り替え先のカメラアクターを渡します。

カメラに切り替えるというイメージがあるかもしれませんが、この機能はカメラでなくても実はOKです。ただのスタティックメッシュやライトなどであっても切り替えが可能です。
ただし、アクターの位置や向きに依存したビューになるので見た目を調整したい場合にはカメラアクターかカメラコンポーネントを所持したアクターに対して行なってください。

ということもできるようなので、カメラアクター以外でも大丈夫みたいですね。
今回はカメラの切り替えとして使っています。
「Blend Time」には切り替えるブレンド時間を秒で指定します。1.0だと1秒ですね。
0.0を指定すると瞬時にぱかっと切り替わります。最初の初期化時やカットチェンジはこれでよさそうです。
「Blend Func」には切り替え時に使用するブレンド関数を指定します。
「Blend Exp」には上記の切り替え時のブレンド関数に影響する係数を指定します。
「Lock Outgoing」についてはいまいちよくわかっていないのですが
ドキュメントに

If true, lock outgoing viewtarget to last frame's camera position for the remainder of the blend.
trueの場合、ブレンドの残りの部分について、出力ビューのターゲットを最後のフレームのカメラ位置にロックします。

とあるので、
対象のアクターが動いているような場合でも、カメラがちゃんと綺麗につながるようにロックしてくてる。
みたいな感じなのかなと思います(あくまで思います)
動いてるカメラに対してブレンドするときなどに必要なのかなと…。
ただ、こういうのはこれに頼らず自分で制御した方がよさそうな気もしますね。

「Set View Target with Blend」の公式ドキュメントはこちら。

・Set View Target with Blend
https://docs.unrealengine.com/latest/INT/BlueprintAPI/Game/Player/SetViewTargetwithBlend/index.html

というわけで使い方としてはこんな感じになりました。
カメラ切り替え004
対象のカメラに2秒かけてリニア補完で切り替える。といった処理ですね。

動画は取っていないのですが alwei さんがとったものがあったのでこちらをぺたり。

ゲームを作ったりするのには結構使いそうなノードになりそうですね。

| UE4 | 11:25 | comments:0 | trackbacks:0 | TOP↑

≫ EDIT

UE4 カメラを配置する(Camera)

UE4 でカメラを新たに配置する方法です。
こちらのサイトを参考にさせてもらいました!

・UE4 ゲーム中にカメラ切り替えを行なう方法
http://unrealengine.hatenablog.com/entry/2015/09/26/215004

カメラについての公式ドキュメントはこちら。

・カメラを使用する
https://docs.unrealengine.com/latest/JPN/Gameplay/HowTo/UsingCameras/index.html

カメラの配置自体は簡単で、「モード」の「配置」タブで
「クラスの検索」窓に「Camera」と入力してでてくる「カメラ(Camera)」をドロップするだけです。
カメラ切り替え001
上記のカメラ(日本語モードなのでカタカナ)を配置します。

するとアウトライナにこんな感じで表示されます。
カメラ切り替え003
「CameraActorSub」という名前にしてみました。
ここはなんでもよさそうですね。

このカメラを選択して位置や回転を変更することでカメラが映す場所を変更することができます。
カメラ切り替え002
こんな感じでカメラ選択中はプレビューで確認できるのが楽でいいですね。

カメラの詳細はこんな感じのパラメータがあるのですが
カメラ切り替え007
パラメータとしてとりあえず覚えておくといいのは
「Field Of View」「Aspect Ratio」なのかなと。
「Field Of View」は画角ですね。デフォルトが90になっているのでたぶん水平画角なのかな…?
「Aspect Ratio」はアスペクト比ですね。16:9であれば1.7777のような値になります。

画角についてはUE4とは関係ないですがこちらが参考になりそうです。

・3Dカメラの話
http://nomoreretake.net/2016/02/20/camera/

とりあえずこれでカメラの新規作成はできたので次は切り替える方法ですね。
カメラのパラメータについてもそのうち詳しく学ばないとだめそうですが…。

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

≫ EDIT

UE4 Game Mode を取得する(Get Game Mode、Cast To Game Mode)

BPで「Game Mode」を取得する方法です。
「Game Mode」は「Restart Game」だったり便利なノードを呼ぶために必要だったりします。

ゲームモードを取得するには「Get Game Mode」ノードを使います。
GameMode002.png
「Get Game Mode」ノードは少し前だと「Game Mode」を返していたのですが
現在のバージョンだと「Game Mode Base」を返すようになっています。
これについてはこちらのブログが参考になります。

・UE4 Game ModeとGame Mode Baseの違いについて
http://unrealengine.hatenablog.com/entry/2017/01/30/220000

取得した「Game Mode」は独自の「Game Mode」に変換して使う必要があります。
独自の「Game Mode」の作成の仕方はこちらに。

・Game Mode と Game Mode Base について(Game Mode、Game Mode Base、Get Game Mode)
http://kagring.blog.fc2.com/blog-entry-291.html

こんな感じで「Cast To Game Mode」ノードを使ってキャストしてから使います。
GameMode001.png
こうすることで入力に「Game Mode」が必要になるノードを実行することができます。

「Game Mode」と「Game Mode Base」についての更新がはいってから
ここらへん少し変わったので注意が必要ですね。

| UE4 | 12:55 | comments:0 | trackbacks:0 | TOP↑

≫ EDIT

UE4 Game Mode と Game Mode Base について(Game Mode、Game Mode Base、Get Game Mode)

「Game Instance」について調べていて、「Game Mode」なるものを見つけました。

こちらですね。

・GameMode、GameInstanceなどの違いについて
http://imoue.hatenablog.com/entry/2016/05/24/223150

GameMode マップ切り替えまで レベルごとに1つ サーバーにだけ存在 プロジェクトのデフォルトとは別にレベルごとの設定も出来る


あまり「Game Mode」の使い方がわかっていないのですが
バージョンが更新され「Game Mode」「Game Mode Base」というものに分離されたようです。
この更新によって、「Game Mode」の扱いが少し変わったみたいですね。

「Game Mode」と「Game Mode Base」の違いについてはこちらに詳しく書いてありました。

・UE4 Game ModeとGame Mode Baseの違いについて
http://unrealengine.hatenablog.com/entry/2017/01/30/220000

Get Game Modeで取得できるのはGame Mode Baseクラス
表題の通り、問題は"Get Game Mode"ノードを使った時です。4.13以前はこのノードで"Game Mode"クラスのリファレンスを取得できました。が、4.14からは"Game Mode Base"のリファレンスになっています。

これが扱いとしては一番あれ?ってなるところですね。

実際こんな感じのことが自分の方でもありました。

原因としては今まで「Get Game Mode」が「Game Mode」を返していたのに
今は「Game Mode Base」を返すようになったので、実行できないノードがあったようです。

というわけで、解決法としては「Game Mode」を継承した「Game Mode」クラスを作成し、
継承したクラスにキャストしてから実行する。といったもののようです。

よく使うクラスに存在する「Game Mode Base」ではなく、
「Game Mode」クラスを継承
して新しい「Game Mode」クラスを作成しましょう。
GameMode000.png

そうすると、「Get Game Mode」で取得した「Game Mode」をキャストすることができ、
「Game Mode」を入力に使ったノード(今回は Restart Game ノード)を実行することができます。
GameMode001.png

「Game Mode」自体まだまだ理解できてないので、徐々に理解していきたいですね。

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

≫ EDIT

UE4 データやパラメータなどの値をレベルを変更しても保持して扱う(Game Instance、Get Game Instance、Cast To Game Instance)

ゲームを通して変数や値などを保持したい場合、何を使ったらいいかがわからなかったので調べてみました。
最初は「Game Mode」かなと思ったのですが、
「Game Mode」はレベルが変更されると失われるのですね。

こちらのブログをみてて違いがわかりました。

・GameMode、GameInstanceなどの違いについて
http://imoue.hatenablog.com/entry/2016/05/24/223150

「GameInstance」はゲームを起動している間でプロジェクトごとに1つ。
「GameMode」はマップ切り替えまででレベルごとに1つ。


ということみたいですね。ためになります。

というわけで、パーティーのデータやパラメータなどの保持に向いてそうな
「Game Instance」について調べてみることにしました。

いつもお世話になってるこちらのブログを参考に。

・UE4 レベルを跨いで値を保持するGameInstanceについて
http://unrealengine.hatenablog.com/entry/2014/08/28/203638

まずは「Game Instance」を継承したそのゲーム独自の「Game Instance」を作ります。
アセットの新規作成のブループリントクラスを選択し、
GameInstance000.png
「Game Instance」を継承して「Game Instance」ブループリントを作成します。
GameInstance001.png
そうするとこんな感じで「Game Instance」が作成されます。
GameInstance002.png

このままではアセットとして作成されただけで、
プロジェクトには設定されていないため、使えるようにします。
「編集」の「プロジェクト」設定を選択し、
GameInstance003.png
「マップ&モード」の中にある「Game Instance Class」
作成した「Game Instance」を設定します。
GameInstance004.png
こうすることで、独自の「Game Instance」がゲーム中で使えるようになります。

実際に使う場合はこんな感じでしょうか。
GameInstance005.png
「Game Instance」を使う場合は「Get Game Instance」で取得したものを
「Cast To Game Instance」で独自の「Game Instance」にキャストを行って使います。

上の画像の場合、「New Game Instance」クラスにキャストして、
「New Game Instance」BPの中にあるBool型変数「New Bool」の値をとってきて表示しています。

こんな感じで値の保持と参照などを結構どこからでもできるので、
ゲーム全体で管理して使うようなものはなんとかなるのではないでしょうか。

もう少し詳しい内容についてこちらのブログにありました。

・【UE4】GameInstanceについて
http://meganeo.blog.shinobi.jp/ue4/%E3%80%90ue4%E3%80%91gameinstance%E3%81%AB%E3%81%A4%E3%81%84%E3%81%A6

例えば、オプション画面(オプション画面用Level)でゲーム内音量設定をした場合、その設定情報はゲーム内の音量に連動させなくてはならないため、ゲーム中画面(ゲーム用Level)に移行するまで保持しておかなくてはなりません。GameInstanceを使用して設定情報をオプション画面でSet、ゲーム画面でGetすることで、ゲーム内の共通の情報を扱うことができます(グローバル変数のような扱い)。

使い方としてはこういったことですね。

GameInstanceの機能に関して簡潔にまとめると以下の3点です。
 ・レベルを跨いだ値の保持
 ・ゲーム中のプレイヤー管理
 ・ネットワークリプレイの管理

こういった機能がメインのようです。

それと、「GameInstance」の作成タイミングでエディタとスタンドアローンでことなるようです。

PIE実行
 実行の度にGameInstanceを作成
 終了の度にGameInstanceを解放

・Standalone実行
 実行時にGameInstanceを作成
 終了時にGameInstanceを解放

ここらへんは少し気を付けたほうがよいかもしれません。

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

≫ EDIT

UE4 モデルを昔風に描画するプラグイン「Oldskooler」

ツイッターでこういうのを見かけたのでメモ。

公式ページはここみたいです。

・Oldskooler
https://gameappmakerco.itch.io/oldskooler

う…英語…_(:3」∠)_
ただ調べてみるとちゃんと日本語の記事がありました。
さすが3D人さん…!

・Oldskooler - ボクセル化&ピクセル化!頂点ライティング!モデルを昔風の表現にするUE4アセット!
http://3dnchu.com/archives/oldskooler-ue4/

基本機能として以下のものがあるみたいです。

ボクセル化
3dピクセル化!
頂点量子化
沸き返るような, 低速のポリッシュメッシュが早く3Dゲームに入ったのを揺らす。
ピクセル化
シーンの特定の部分を他の環境よりも低く表示するようにします。 カスタム深度バッファまたはステンシルバッファを使用して、影響を受けるオブジェクトをマスクすることができます。
スティプル透明度
高周波数の不透明マスクで、ハードウェア上に半透明の錯覚を作成。
フリッカー透明度
即座に認識可能な外観を備えた別の半透明ハック。
頂点ライティング
通常の照明に代わる非常に速い代替物。 モバイルに最適


モデルをボクセル化やピクセル化して描画できるみたいですね。
動画ではこんな感じに。


昔風の味のあるようなグラフィックのゲームを作る場合などに重宝しそうですね。

| UE4 | 12:50 | comments:0 | trackbacks:0 | TOP↑

≫ EDIT

UE4 レベルを検索して開くショートカット(CTRL+O)

レベルを検索窓で検索して開く方法です。
これもまったくしらなかったのですがUE4のエディタにはショートカットがあったのですね。

レベルを検索して開くにはキーボードの「CTRL+O」を押します。
レベルを開く000
するとこんな感じでレベル一覧がでてきます。
「アセットを検索」と書かれているところに文字を入力していくと、ファイルが絞られていきます。

ファイル名がわかっている場合はツリーから探すよりこっちの方がはやくなりそうですね。

| UE4 | 12:08 | comments:0 | trackbacks:0 | TOP↑

≫ EDIT

UE4 アセットを検索して開くショートカット(CTRL+P)

アセットを検索窓で検索して開く方法です。
まったくしらなかったのですがUE4のエディタにはショートカットがあったのですね。

アセットを検索して開くにはキーボードの「CTRL+P」を押します。
アセットを開く000
するとこんな感じでアセット一覧がでてきます。
「アセットを検索」と書かれているところに文字を入力していくと、ファイルが絞られていきます。

ファイル名がわかっている場合はツリーから探すよりこっちの方がはやくなりそうですね。

| UE4 | 11:57 | comments:0 | trackbacks:0 | TOP↑

≫ EDIT

UE4 ワールドの時間速度(ゲームスピード)を早くしたり遅く(スローモーション)したりする(Set Global Time Dilation、Custom Time Dilation、Execute Console Command の slomo コマンド)

ワールドの時間速度(ゲームスピード)を変更するための方法です。
全体的に早送りをしたり、スローモーションなどを実装するときに使えそうです。

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

・UE4小ネタ : 制限時間の実装方法を色々と
http://pafuhana1213.hatenablog.com/entry/2015/11/21/014427

ゲームスピード制御は以下の三つのノードを使うことでできるようです。
「Set Global Time Dilation」
「Custom Time Dilation」
「Execute Console Command の slomo コマンド」


「Set Global Time Dilation」ノードはそのまま係数を指定します。
スローと早送り000
「Time Dilation」には係数を指定します。
1.0で等倍、2.0で倍速みたいになります。0.1などを指定するとスローモーションですね。

「Custom Time Dilation」に対してセットするノードもそのまま係数を指定します。
スローと早送り001
こちらも1.0で等倍、2.0で倍速みたいになります。0.1などを指定するとスローモーションですね。
ただ、自分のところで実行してみたらうまく動きませんでした。
ちょっと謎です…。

「Execute Console Command」で「slomo」コマンドを実行する方法です。
スローと早送り002
「Execute Console Command」で「slomo 速度係数」を実行します。
こちらも「Set Global Time Dilation」と変わらずに係数を指定します。
1.0で等倍、2.0で倍速みたいになります。0.1などを指定するとスローモーションですね。

ちなみにこれらの速度変更したものに対して、以下のようなことがあるようです。

スローモーションや早送りを実装する際、
「Set Global Time Dilation」ノード、「Set Custom Time Dilation」ノード、
または、「slomo」コマンドによる処理速度の変化を使用すると思います。

実は、これらを使用すると、
先ほどまで紹介してきた計測手法の一部では
処理速度の変化の影響を受けてしまい、正確な時間を測れなくなります。

具体的には、こんな感じ

影響を受ける
Delta Sceonds
Delay
影響を受けない
Set Timer
TimespanとDatetime


じゃあ【Set Timer】と【Timespan、Datetime】だけ使えばいいのか、
というと、そうではない時もあります。

例えば、「スローモーション中は残り時間の減り方もスローに」
という演出をしたい場合は、影響を受けない手法だと色々と面倒です。

つまり、用途に応じて使い分ける必要があるということです。


ここらへんを理解して使えるとよさそうですね。
早送りはともかく、スローは結構演出で使うと思います!

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

| PAGE-SELECT | NEXT