てんちょーの技術日誌

自分がつまづいたこととかメモ

【UE4】UE4札幌MeetupでVREditorのお話をしてきた

はじめに

すごい勢いで決まった今回のイベント

僕が勝手に

と持ちかけたところから始まっています。

気がつけばとんとん拍子で決まっていき2時間くらいで決まってしまいました。

中身のお話

そこでVREditorのお話をしてきました。

Reveal.jsとMarkdownで資料を作ったのがこちら

VREditorを使ってゲームを作ってみた UE4MeetUpSapporo

2016/07/03時点で公開されているVREditorの資料の中で、一番色々やっている気がします。

資料読むのが面倒な方用にざっくり説明すると

  • 簡単なレベルデザイン"だけ"ならサイズ感ばっちり
  • すべてをVR内で完結させるのはまだ厳しい
  • 調整できることが限られている

といったことをまとめてあります。

他にもalweiさんの絵作りのお話と、おぎまふさんのセル表現のお話もありました。 どちらもとても勉強になる内容でした…

ue4studysapタグを追ってみたりするといいかもしれません。

そしてパネルディスカッションにも参加させていただきました。

質問内容は事前に教えて頂いてたのですが、ほぼその場で思いついたことを言っていただけなので役に立ったのかどうかわかりませんねww

あとでTwitterのタグを追いかけてみると、

とこの辺りが自分で話してた内容ですね。何か参考になれば幸いです。

まとめ

EPICの今井さんや、alweiさん、まえはなさんなどすごいギリギリな日程の中本当にありがとうございました!!

今井さんとalweiさんと僕が当日北海道入りするというよくわからない状態でしたね…

まだUE4歴1年未満ですがこれからも頑張って行きたいです。

おまけ

なんと、このイベントの予定を入れてから気付いたのですが大学院の推薦入試と被ってしまったことに気づき、さらに前日はVRZoneが21時終わり(飛行機の最終は21時半)など他にも色々不運なことが重なってました。

ということで、かなり出遅れていますが就活しようかと思ってます。

一応新卒です。雇ってやってもいいぜ!みたいなお話があれば@shop_0761にDMとかいただけると泣いて喜びます。

【UE4】twitterで解決したちょっとしたつまづきをまとめてみた(随時更新予定

はじめに

簡単な疑問とか、AnswerHabに投稿するまでもないような内容はTwitterに投げておくと解決したりします。

それらをどこかにまとめたほうがいいんじゃないか、みたいなお話があったのでまとめておきます。随時増えると思うのでちょくちょく書き足していきたいです。

極み本にて

ピボット

これは直接筆者の方からコメントを頂きました。

と、根本的な解決が出来なかったのでその章のプロジェクトデータを使って次の章に進みました。

後日、他の方も同じような問題に遭遇してたみたいで原因はよく分かってません…

Possess

今となってはそりゃそうかって感じですね…

どんどん明るくなる

これ地味に困ってました。

そして解決したのは建築本を見た最近です。これskyLightを置けば多少緩和されるのですが、根本的な解決にはなってませんでした。室内でもわぁっとした感じが残ってしまっていました。

なにが問題だったかというと自動露出です。建築本によると

自動露出が設定されていると、プレイ中に明るい部屋から暗い場所に移ったとき、またはその逆のときに、じんわりと目が慣れてきて周囲が見えてくるという効果が現れます。

まさにこれでした。これを切るにはPostProcessVolumeを使います。

f:id:shop_0761:20160426114447p:plain

このMinとMaxを同じ値にすると切れます。あとは明るさの調整に寄るので数値は調整してください。(UnBoundとかにしておくと楽

アニメーションBPでのGetController

このころ何やってたか思い出せませんが、一応解決してるっぽいですね…

ポーズの実装

Splineのノード名が変わったっぽい

EventTickでの分岐

ゲート便利です。

物理アセットで見えてる軸

これ奥のやつだけY軸が上向いてたので揃えられるのかなーと思ったら、モデルの仕様っぽいので気にしないことにしました。(気にしなくてもなんとかなった

マテリアルのstaticBoolParam

そりゃstaticなので変更出来ませんよねってなりました。けど、このLerpで解決するのは面白いですね。

TimeLineノードでループ処理をしたい時

ForLoop→TimeLineとやると、ForLoopだけ先にぐるぐる回ってしまうので配列の最後の要素だけにTimeLineの結果が反映される感じになったと思います。

なのでTimeLine→ForLoopとすると配列の全ての要素にTimeLineの結果を反映させることができます。すごい。

BTService内でEventReceiveTickAIを使う時

wavファイルが上手く読み込めない

wavファイルは推奨設定がありました。

docs.unrealengine.com

これに合わせて編集するといいと思います。けど既存のSEとかは再変換しなきゃなりません。

ぷちコン作ってた時はこちらにお世話になってました。一括で変換できるし軽いので便利です。

osdn.jp

TimeLineの長さ

これで、3s、5s、7sとかで発火するイベントを仕込んでおいて長さを変更すれば7sのだけ発火させないみたいなことが出来るのかな…

継承とイベント

これはおかずさんのmotionControllerSampleでのBPです。

pafuhana1213.hatenablog.com

中身を読んだメモを書きました

shop-0761.hatenablog.com

RemoteEvent

これ便利なんですが、GameModeとかGameInstanceに処理を書いたほうが安全では…となりました。

配列のコピー

テレビみたいに見せたい

Billboardだとカメラに追従して回転するので3DWidgetのほうが良かったです。

ランダム生成すると出るエラーのひとつ

Failed to stream mip data from the derived data cache for "Map" Streaming mips will be recached

これランダム生成した壁とか床とかをStaticにしたら出なくなりました。

Animation Notifiesで落ちる

ぱっとTextureを表示した時にボケてから徐々にみえるようになる

Helpみたいにボケると困るものはTextureのここを変更するといいみたいです。

f:id:shop_0761:20160426121211p:plain

参考

effect.hatenablog.com

3Dwidgetに設定したWidgetクラス

Viveのコントローラの位置がなんか合わない

これに関してはマジでドキュメントに書いておいて欲しい

ありがとうおぎまふさん!

VR用のパッケージング

hmd mirror on/off

もともとは

タイプミスしたにもかかわらず、hmd mirror offと同じ現象になってしまった模様

解決策はこりん(@k0rin)さんに教えていただきました

ちなみにUE4.12.5 7月15日現在では

hmd mirror mode [0-4]

でも発生する可能性がある…と思います

(hmd mirror mode 2ではなった)

2016/11/05 追記 これ Oculus系HMD専用コマンドなので、Viveでやるとダメっぽい

ForLoop→TimelineでTimeline終了時にLoopを回したい

色々ありましたが、たつのる(@tatsunoru)さんに教えて頂きました。

だそうです。ありがとうございます!

参考

違う場所(UnrealProjects以下でない)ところに保存したプロジェクトをもうLauncherに表示したくない

こんな感じのこと

でなんとか発見しました

どうやらここを参照しているようです。

なのでここを消したりすればいいんじゃないかと思います。

AppDataは隠しファイルなので、表示するようにしてから探しましょう。

参考

How do I delete projects? - UE4 AnswerHub

【UE4】第5回ぷちコンでボツになってしまったものたち

はじめに

ぷちコンで作ったもろもろ紹介編6です

元記事

shop-0761.hatenablog.com

作ったはいいけど、ボツになってしまったものたちをここで紹介させてください…

トロンの装備

Cannon

まずCannonはもともとビームではなく、弾を撃ってました。溜め打ちの実装まで作ったり、溜めてる間はゲージっぽいものを作ったりもしました。(こっちは残ってます

f:id:shop_0761:20160426110038p:plain

f:id:shop_0761:20160426110057p:plain

けど、世界観が出来上がっていくにつれてビームの方がいいんじゃない?と言われて修正しました。

弾を打つほうが衝突判定は取りやすかったんです、はい。

空を飛ぶ

トロンはもともと場所を指定したところへ放物線上に飛んで行くような感じで作ってました。もちろん今みたいに複数点を巡回する感じではありませんでした。 なので、遠くへ飛ばすときになにかいるなと思って最初に作ったのがWingです。

f:id:shop_0761:20160426111322p:plain

すごい壮大な感じになってしまいました。そしてこのwingのアニメーションも作ったんですが、どうもしっくりこないし世界観とのズレを感じてまた作りなおしたのがPropellerです。

f:id:shop_0761:20160426111430p:plain

なんとかコプター的なイメージで作りました。これは結構いい出来かなーと思ってました。けど常時浮いてるし、それならそもそもこういう装備がいらないんじゃ…ってなったのでさよならしました。

解錠

最初はカードリーダーではなく鍵を作ってました。けどこれ作り方を間違えたのかUV展開が上手くいかず、さらには世界観(ry なので割とすぐにボツになりました。

f:id:shop_0761:20160426111810p:plain

f:id:shop_0761:20160426111825p:plain

というか今回作ったカードリーダーの名前が分からなくて、なんとかの森で使ったe+カードリーダーを参考に作りました。

まとめ

と考えて作らないと世界観が(ryってなるのでいい加減イメージを固めてイラストにしてから作り始めるべきだなと思いましたw

こう見るとブレッブレですね… なんとか纏まったのが奇跡かもしれませんw

【UE4】MaterialBillBoardを使った視点=照準のやつを作ってみた

はじめに

ぷちコンで作ったもろもろ紹介編5です

元記事

shop-0761.hatenablog.com

色々VRのコンテンツを見ていると視点=照準みたいなのが多いけど、実装方法があんまり書いてないなと思ってました。 結論から言えばHUDで実装すればいいのですが、そこにたどり着くまでにつくったMateriallBillBoard版もメモとして書いておきます。

作ったもの

f:id:shop_0761:20160426032053g:plain

こんな感じでヒットしてる感は出せます。(HUDだと画面に張り付いてる感が大きい気がします…

作り方

PlayerにMaterialBillBoardコンポーネントを追加しておきます。今回はこんな透過pngを用意しました。

f:id:shop_0761:20160426030241p:plain

でマスクかけたものを使っています。一応UIかなと思ってUIMaterialにしてます。

f:id:shop_0761:20160426030446p:plain

で、これをあとはLineTraceでHitしたLocationにSetWorldLocationします。

ただこのままだとEventTickでSetすることになるんですが、そうするとPlayerが後退した時にぶれます。

f:id:shop_0761:20160426032741g:plain

なので入力の方でSetLocationすると解決しました。きっとTickが悪さしてるような気がします。

簡単なイメージ図だけ

f:id:shop_0761:20160426031441p:plain

こいつこのまま使うと壁にめり込んでしまうので、ちょっと調整したりしてます。

twitterでのメモも載せておきます。

【UE4】LineTraceを使わずに銃の当たり判定を作ってみた【小ネタ】

はじめに

ぷちコンで作ったもろもろ紹介編4です

元記事

shop-0761.hatenablog.com

本来、LineTraceを使うところをちょっと違うアプローチで作ってみました。ほんとはBeamParticle自体に当たり判定を付けたかったんですが…w

作り方

無駄に2点間の距離を計算するノードを使っていますが、普通に(Vector)-(Vector)のLengthを取れば良い気がします。

f:id:shop_0761:20160426023556p:plain

f:id:shop_0761:20160426023607p:plain

  1. このイベントが発火したタイミングでのPlayerLocationを取っておく
  2. 1s後のPlayerLocationと比較してその距離が300以下の時にTrue
  3. BeamTargetを今のPlayerLocationにセットしてApplyDamage

としてます。Falseの時は取っておいたPlayerLocationのzを0にした値をBeamTargetにしてます。

これのいいところは、敵正面だけでなくちょっとしたホーミングのような感じになるところです。なので割と当たります。デバッグ時も普通に食らってました。

すっごいあっさり終わってしまった…

【UE4】 UE4上で簡単なアニメーションを1から作ってみた

はじめに

ぷちコンで作ったもろもろ紹介編3です

元記事

shop-0761.hatenablog.com

既存のアニメーションに加算していく記事は見かけたので、今回は1から作ったのでまとめてみたいと思います。

作り方

SkeltalMeshをダブルクリックとかしてCreateAsset→CreateAnimation→FromReferencePoseします。(FromCurrentPoseでもいいと思います

f:id:shop_0761:20160426021203p:plain

適当なところに保存します。

f:id:shop_0761:20160426021211p:plain

すると1フレームだけのアニメーションファイルが出来ます。

f:id:shop_0761:20160426021236p:plain

これじゃ使いにくいので、下のバーを右クリックしてフレームを追加します。今は1フレームしかないのでInsertしようがAppendしようが変わらないと思います。

f:id:shop_0761:20160426021245p:plain

で、設定したいボーンを選択して、上のKeyを押すとトラックを追加できます。

f:id:shop_0761:20160426021252p:plain

後は加算アニメーションと同じ要領で作れると思います。試しに頭をぐるぐる回すものをつくりました。

f:id:shop_0761:20160426021314g:plain

参考

pafuhana1213.hatenablog.com

まとめ

このくらいの簡単なアニメーションならいいのですが、複雑なものまで…となると正直使いやすいかと言われると微妙です。どんどん改良されて使いやすくなるといいですね。

【UE4】ぷちコンで作ったAIとEQSのお話

はじめに

ぷちコンで作ったもろもろ紹介編2です

元記事

shop-0761.hatenablog.com

今回のテーマがAIだったので作ってみました。簡単な概要とかは極本23章(P395-)などを参照するかといいと思います。

AIやビヘイビアツリーに関する情報が少ないのでちょっと苦労しましたw

AI トロン編

全体はこんな感じ

f:id:shop_0761:20160426003447p:plain

やや複雑に見えますがやってることは大きく分けて、移動するか、装備を使うか、の2種類です。

移動するほう

f:id:shop_0761:20160426003635p:plain

  1. TargetLocationを見つける
  2. 移動する
  3. 条件によってはその場で一回転する
  4. 待つ

といった感じです。

移動に関してはこちらを見てください。

shop-0761.hatenablog.com

回転するのは、SetActorRotationを使って1回転させようとすると荒ぶってしまったのでRotatingMovementを使っています。

f:id:shop_0761:20160426011901p:plain

RotatingRateを(0,0,180)にしてあるので2sだけdelayしてます。すると大体でいいなら1回転します。

で、装備を使う方はこちら

f:id:shop_0761:20160426004239p:plain

他の装備を使うところもほぼ同じ作りなので写真は割愛します。

処理の流れとしては

  1. LineTraceでHitしたActorのタグを取得
  2. そのタグによって分岐
  3. 現在のトロンの装備によって装備切り替え
  4. その装備のアクションを実行(BPInterfaceで実装した)

となってます。

ビヘイビアツリーではif文にあたりそうな処理が見当たらなかったのでBlackboardBasedConditionでEqualとNotEqualの2つを作って分岐させてます。

ConditionalLoopは設定した条件である限りループできるので装備のタグがCannonでない間はループし続けます。 そして、その装備をまだ持っていない可能性もあるのでTimeLimitで設定した時間だけループさせて、時間が来たら処理を中断させてます。

ほんとはタグを使ったswitch文的なのが表現出来ればよかったんですが、ビヘイビアツリーはそういう使い方ではないのでやや冗長な感じになってしまっている感はあります。

そしてなぜBPみたいにコメント出来ればいいのに…(そのノードに関するコメントしか書けない

最後にこれ

f:id:shop_0761:20160426005545p:plain

ChangeSightをしている間はトロンは動きません。ここでBoolをセットしてます。

これAIを単純に止めるだけで良いのであれば、こちらを参照してください。

qiita.com

でも今回はどっちかというとポーズ処理なので、完全に止めてしまうとまずいわけで…

C++にはIsPaused()があるのでこちらを使っても良いかなと思ったんですが、今回はやめました。

AI ボス編

f:id:shop_0761:20160426005433p:plain

流れとしては

  1. EQSを使って良さそうな移動先を見つける
  2. LocationとRotationを生成する
  3. 時々攻撃したり、ワープしたりする

です。EQSはこちらにチュートリアルがあります。実装した時はまだまだ不安定な時があったので思うように動かなかったりしました。

docs.unrealengine.com

今回使ったEQSはこれ

f:id:shop_0761:20160426010630p:plain

f:id:shop_0761:20160426010823p:plain

f:id:shop_0761:20160426010837p:plain

というような感じでScoreを設定して、場所を探っていけます。ほんとはもっといい感じにしたかったんですが、EQSのTraceが上手く使えなかったので断念しました…

まとめ

と、書いてみると意外と大したことない感じの中身でもそれっぽく動いてくれるので便利です。ただ使用例とかが少ないのでいまいちイメージが掴めないってのが現状な気がします。 ぜひ一度作ってみて、こんな処理してるよみたいなのが見たいので挑戦してみてください。