VRのInputの変更についての軽いまとめ【UE4.24.2】

2020年も始まって早1か月が過ぎたところで超絶久々の更新。

GGJでVRのゲームを作ろうとした際にはまったのでまとめておこうと思います。

 

まず、MotionController系のInputEventが各VR/MRのHMDごとにバラバラになりました。

f:id:shiratori00:20200205173857p:plain

VRのInput設定スクショ

イベントグラフにMotionController系のInputEventを個別に置けなくなりました。プロジェクト設定のInputからAction/Axisのイベントを作成してからでないと使えません。

f:id:shiratori00:20200208191910p:plain

右クリックメニューのインプットカテゴリの中にない


バイスが増えて共通ボタンがない奴が出てきたからこうなったんだと思うんですが、軽くデバッグで動作確認するのが面倒になりましたね・・・。

 

UE4で2Dゲーム考察

3週間ほど前にあったUnreal Engine Meetup Nagoya#8でタイトルのようなLTをしました。

www.meetup.com

ざっと内容をまとめると、UMGで2Dアクションゲーム作ろうとしたけど、そんなマネしない方がいいよ!っていう感じです。

 

スライドはこちらになります。

docs.google.com

なんかSlideShareに上げようとしたら失敗しまくったので、そのままGoogleSlideで公開しました。

 

プロジェクトはGithubに公開してあります。

github.com

 

数日で作ったので、いろいろな部分を端折りまくったり妥協したりで、かなりひどいので、静かに更新をしばらく続けるつもりです。

 

 

 

【DirectX12】D3D12HelloWindowを試す際のメモ

DirectX12の勉強で、写経してるときにぶつかったメモです。

 

DirectX12の公式サンプルがgithubにあります。

github.com

その中のD3D12HelloWindowをビルドすると、こんな感じのエラーを吐きます。

f:id:shiratori00:20180919190525p:plain

 

解決方法ですが、標準であれば

C:\Program Files (x86)\Windows Kits\10\Include\10.0.17134.0\winrt\wrl

のパスにあるevent.hの316行目と324行目の部分

return DelegateHelper::Traits::Callback...

return DelegateHelper::Traits::template Callback...

と修正します。

 

これでエラーがなくなり、ビルドがきれいに通ります。

ちなみに、管理者権限が必要で、VisualStudio上から直接修正できないので、VSCodeなりで修正する必要があります。

 

ちなみに、調べてみるとエラーの起きた理由はこちらに書いてありました。

C++ 準拠の改善 | Microsoft Docs

15.8以降より、

/permissive- モードでは、コンパイラが依存する nested-name-specifier の後にある場合にテンプレート名が優先されるためには、コンパイラで template キーワードが必要になりました。

/permissive- モードでは次のコードにより、C7510 が発生します: 'foo': use of dependent template name must be prefixed with 'template'. note: see reference to class template instantiation 'X' being compiled('foo': 依存するテンプレート名を使用する場合は 'template' のプレフィックスが必要です。注: コンパイルされているクラス テンプレートのインスタンス化 ’X’ のリファレンスを参照してください)

 

とのことです。注意しましょう。

 

 

UE4.17でのGearVR開発事始め + GearVRコントローラの使い方

GearVRの記事が少なすぎるのと、UE4でのGearVRコントローラの記事を全く見ないので書くことにしました。

 

まず、GearVR開発の環境構築ですが、Androidの構築に関してはリンクを載せておくので割愛します。ここまでは情報がいっぱいあるので・・・。

 

UnrealEngine公式のクイックスタート

Samsung Gear VR UE 4 のクイックスタート

 

また、おかずさんのブログの古い記事ですが、導入部分は今と変わらないので、参考になります

UE4でGear VR開発してみる 準備編

 

ぶっちゃけGearVRのアプリを開発するなら、フレームシンセンスさんのこちらを参考にすればとりあえずできます。

UE4+Gear VR開発メモ

 

簡潔に手順を説明すると、

Androidの開発環境を構築

②Oculus公式からデバイスの署名ファイルをダウンロード

③上でダウンロードした署名ファイルを使いたいバージョンのエンジンの所定の場所に配置

④プロジェクトを作成し、プロジェクト設定のAndroidの設定で、【Configure the AndroidManifest for deployment to GearVR】に設定

 

特に問題がなければ、GearVRアプリケーションとして動くはずです。

 

また、Inputのバーチャルパッドを外すなども必要です。バーチャルパッドに関してはMozPacaさんがまとめてくださっていたので参考に。

UE4 バーチャルパッドについての備忘録

 

以上で、新旧GearVR共通のアプリ開発の準備が完了です。

 

ここからが本題のGearVRコントローラの使い方になります。GearVRコントローラは新型GearVRコントローラと同時に発売されたコントローラです。

ボタン配置的にはViveControllerとOculusRemoteを足して割った感じの印象を受けます。

 

GearVRの開発のできるUE4ではこのControllerを使用したアプリの開発をすることができます。

 

使用するためにはまず、本体とペアリングする必要があります。OculusHomeを立ち上げ、下部にある、もっと見るを選択します。

メニューの中から、リンクした機器のコントローラーに進むと、新しいコントローラーのペアリングという項目があります。

選択すると、ペアリングが始まるので、ナビゲーションに従ってペアリングをしてください。

 

準備ができたら開発を初めましょう。

 

では、解説を始める前に今回、4.17とバージョンを指定しているわけですが、4.16にはGearVRControllerComponentというGearVRController用のコンポーネントが存在していました。

4.17ではそれが消え、MotionControllerComponentにその機能が統合される形になりました。

4.15以前では確認できていません。

 

説明をはじめます。まず、最小構成のPawnを基底クラスとしたブループリントクラスを作成します。

Player.png

 

MotionControllerコンポーネントではHand列挙体変数をAnyHandに設定します。これで、プレイヤーの作成は終了です。レベル内に放り込んで、Actorの詳細設定からPlayer0でInputを取得するように設定してください。

 

次に、入力マッピングについてです。

 

戻るボタン

ReturnButton.png

 

静電パッド

SeidenPad.png

 

静電パッドのとこにある物理キー

ThumbButton.png

 

裏のトリガー

Trigger.png

 

デバッグ用のコードも混じっていて汚いので、文字でも残しておきます。

 

UE4での入力イベント

 

裏のやつ

Trigger :Rightだけ(利き手側

 

静電パッドの物理キー

ThumbRight・Left・Up・Down(利き手側

 

静電パッド

ThumbX(←マイナス プラス→

ThumbY(↑マイナス プラス↓ 利き手側

 

戻るっぽいやつ

Facebutton1 (左右両方に対応。同時にでた

 

戻るボタン以外は利き手の設定によって変わります。戻るボタンだけは、どちらの利き手でも右左両方のイベントが発生しました。

この違いには、気をつけてください。

UE4.17のVRテンプレートをOculusRiftで使う際気をつけること

UE4には様々なテンプレートがありますが、その中のVRテンプレートを最新バージョンでOculusRiftを使う際の注意メモ書きです。

HMDLocomotionPawnとMotionControllerPawnのBeginPlayにEyeLevelを設定する部分があり、どちらもSwitch文で現在接続されてるHMDの種類を判別してそれぞれの設定をしていますが、実はOculusRiftという名前で4.17から返ってきていません。

hmdlocomotion.png

正確にはOculusHMDです。これを下記の様に修正しない場合、カメラが床に埋まり続けます。気をつけてください。

motioncontrollerpawn.png

Unreal Engine Meetup Nagoya #4 開催

本日、名古屋ゲーム制作部にて、UnrealEngineMeetupNagoya 4回目を開催しました。

今回から主催の一人で参加させていただきました。あとついでにLTにも登壇させていただきました。今回は主催もLTも初の挑戦だったので、とても心配でしたが、経験されている方にとても助けていただき、無事進行することができました。

LTの資料はSlideShare上げました。

https://www.slideshare.net/shiratori01/ue4-79188510

開会の挨拶のあと、まずはLTから始まります。

まずは僕のLTからで、内容は割愛しますが、マルチプレイヤーに関して少し勉強してたりしたので、軽くお話をさせていただきました。

二人目は大福さんのお話で、UE4DIY~日曜大工感覚で始めるゲーム制作~というもので、つい先日にやっていた土日で音ゲーを作ろうをやって、UE4を使ってこんな感じで進めれば土日でゲームは一本形にできるという内容でした。

是非次の暇な土日にやってみようと思わせてもらえる内容でした。というかやります。

飛び入り参加の荻野さんは昨日にあった、Unreal Engine MeetUp Saitama #3で発表されていた、MacでUnrealEngineをソースコードビルドのやり方と苦労した部分の発表でした。中身を聞いてただの苦行なんだなという感想しかないです・・・。

最後に部長のたすさんが名古屋ゲーム制作部でこれからどういう勉強会をしてほしいかっていうのや、どういう日程でやってほしいかのアンケートを取ったあとに、休憩を挟み本題のMeetUpTimeに入りました。

MeetUpTimeに関しては過去の札幌や埼玉で開催されたスライド資料を見ていただけるとわかるのですが、簡潔に説明すると、数人のチームを作って全員で話したいことを決めて、一定時間(今回は20分)話し合ったあと、チームをシャッフルして~を繰り返すものになります。

全体的に活発に話が盛り上がっていて、20分では足りないくらいに思えるくらいでした。

大体3~4回くらい回して全体ででた話題がこちら。

総括して成功したと言えました。また11月にやります!

UE4で箱を回転させる

フリーになってから初の更新です。

今回はこんな感じにきれいに箱を転がしました。

とはいっても数学をあまりきちんと理解できてない人間なので、こちらのブログのスクリプトを参考にさせてもらい作りました。

[Unity] Cubeを転がすスクリプト

Input関数


input_all.png

Input関数はこんな感じです。基本的には二次元的な入力しかないので縦横方向への入力をもらって、回転させたい角度を作り、回転中フラグや入力値、初期位置、初期回転を設定しています。

また、入力を受け取った際に回転中かどうかを確認しているisRotationはこんな感じ。

is_Rotate.png

入力がきちんとあって、なおかつ回転中でなければ転がり始めます。

RotationCubeイベント


Input関数で初期設定後に走らせるイベントです。

RotateCubeEvent.png

タイムラインで線形補間用のアルファ値を作って回転と移動をUpdateRotation関数の中で行っています。

今回は0.5秒間に0から1へと変わるように設定しています。

UpdateRotation関数


今回やりたいことのメインとなる部分の処理になります。

UpdateRotation.png

細かい説明はできないので省きます。いい感じにX、Y、Z軸方向への移動と回転を行ってます。

移動距離を算出する関数はこれらです。

distanceX.png

distanceY.png

distanceZ.png

GetDistanceXとYはVerticalかHorizontalの変数以外は同じ処理を行っているので外部からわたしてやるともっとスッキリすると思います。

sinとかcosとかはこちらになります。

GetSine.png

GetCosine.png

最後に終了処理

EndRotation.png

もうちょっときちんと数学を勉強しようと思いました。