UE4で2Dゲーム考察
3週間ほど前にあったUnreal Engine Meetup Nagoya#8でタイトルのようなLTをしました。
ざっと内容をまとめると、UMGで2Dアクションゲーム作ろうとしたけど、そんなマネしない方がいいよ!っていう感じです。
スライドはこちらになります。
なんかSlideShareに上げようとしたら失敗しまくったので、そのままGoogleSlideで公開しました。
プロジェクトはGithubに公開してあります。
数日で作ったので、いろいろな部分を端折りまくったり妥協したりで、かなりひどいので、静かに更新をしばらく続けるつもりです。
【DirectX12】D3D12HelloWindowを試す際のメモ
DirectX12の勉強で、写経してるときにぶつかったメモです。
DirectX12の公式サンプルがgithubにあります。
その中のD3D12HelloWindowをビルドすると、こんな感じのエラーを吐きます。
解決方法ですが、標準であれば
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なりで修正する必要があります。
ちなみに、調べてみるとエラーの起きた理由はこちらに書いてありました。
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
とのことです。注意しましょう。
UE4.17でのGearVR開発事始め + GearVRコントローラの使い方
GearVRの記事が少なすぎるのと、UE4でのGearVRコントローラの記事を全く見ないので書くことにしました。
まず、GearVR開発の環境構築ですが、Androidの構築に関してはリンクを載せておくので割愛します。ここまでは情報がいっぱいあるので・・・。
UnrealEngine公式のクイックスタート
Samsung Gear VR UE 4 のクイックスタート
また、おかずさんのブログの古い記事ですが、導入部分は今と変わらないので、参考になります
ぶっちゃけGearVRのアプリを開発するなら、フレームシンセンスさんのこちらを参考にすればとりあえずできます。
簡潔に手順を説明すると、
①Androidの開発環境を構築
②Oculus公式からデバイスの署名ファイルをダウンロード
③上でダウンロードした署名ファイルを使いたいバージョンのエンジンの所定の場所に配置
④プロジェクトを作成し、プロジェクト設定のAndroidの設定で、【Configure the AndroidManifest for deployment to GearVR】に設定
特に問題がなければ、GearVRアプリケーションとして動くはずです。
また、Inputのバーチャルパッドを外すなども必要です。バーチャルパッドに関してはMozPacaさんがまとめてくださっていたので参考に。
以上で、新旧GearVR共通のアプリ開発の準備が完了です。
ここからが本題のGearVRコントローラの使い方になります。GearVRコントローラは新型GearVRコントローラと同時に発売されたコントローラです。
ボタン配置的にはViveControllerとOculusRemoteを足して割った感じの印象を受けます。
GearVRの開発のできるUE4ではこのControllerを使用したアプリの開発をすることができます。
使用するためにはまず、本体とペアリングする必要があります。OculusHomeを立ち上げ、下部にある、もっと見るを選択します。
メニューの中から、リンクした機器のコントローラーに進むと、新しいコントローラーのペアリングという項目があります。
選択すると、ペアリングが始まるので、ナビゲーションに従ってペアリングをしてください。
準備ができたら開発を初めましょう。
では、解説を始める前に今回、4.17とバージョンを指定しているわけですが、4.16にはGearVRControllerComponentというGearVRController用のコンポーネントが存在していました。
4.17ではそれが消え、MotionControllerComponentにその機能が統合される形になりました。
4.15以前では確認できていません。
説明をはじめます。まず、最小構成のPawnを基底クラスとしたブループリントクラスを作成します。
MotionControllerコンポーネントではHand列挙体変数をAnyHandに設定します。これで、プレイヤーの作成は終了です。レベル内に放り込んで、Actorの詳細設定からPlayer0でInputを取得するように設定してください。
次に、入力マッピングについてです。
戻るボタン
静電パッド
静電パッドのとこにある物理キー
裏のトリガー
デバッグ用のコードも混じっていて汚いので、文字でも残しておきます。
UE4での入力イベント
裏のやつ
Trigger :Rightだけ(利き手側
静電パッドの物理キー
ThumbRight・Left・Up・Down(利き手側
静電パッド
ThumbX(←マイナス プラス→
ThumbY(↑マイナス プラス↓ 利き手側
戻るっぽいやつ
Facebutton1 (左右両方に対応。同時にでた
戻るボタン以外は利き手の設定によって変わります。戻るボタンだけは、どちらの利き手でも右左両方のイベントが発生しました。
この違いには、気をつけてください。
Unreal Engine Meetup Nagoya #4 開催
本日、名古屋ゲーム制作部にて、UnrealEngineMeetupNagoya 4回目を開催しました。
今回から主催の一人で参加させていただきました。あとついでにLTにも登壇させていただきました。今回は主催もLTも初の挑戦だったので、とても心配でしたが、経験されている方にとても助けていただき、無事進行することができました。
LTの資料はSlideShare上げました。
https://www.slideshare.net/shiratori01/ue4-79188510
開会の挨拶のあと、まずはLTから始まります。
まずは僕のLTからで、内容は割愛しますが、マルチプレイヤーに関して少し勉強してたりしたので、軽くお話をさせていただきました。
二人目は大福さんのお話で、UE4でDIY~日曜大工感覚で始めるゲーム制作~というもので、つい先日にやっていた土日で音ゲーを作ろうをやって、UE4を使ってこんな感じで進めれば土日でゲームは一本形にできるという内容でした。
是非次の暇な土日にやってみようと思わせてもらえる内容でした。というかやります。
飛び入り参加の荻野さんは昨日にあった、Unreal Engine MeetUp Saitama #3で発表されていた、MacでUnrealEngineをソースコードビルドのやり方と苦労した部分の発表でした。中身を聞いてただの苦行なんだなという感想しかないです・・・。
最後に部長のたすさんが名古屋ゲーム制作部でこれからどういう勉強会をしてほしいかっていうのや、どういう日程でやってほしいかのアンケートを取ったあとに、休憩を挟み本題のMeetUpTimeに入りました。
MeetUpTimeに関しては過去の札幌や埼玉で開催されたスライド資料を見ていただけるとわかるのですが、簡潔に説明すると、数人のチームを作って全員で話したいことを決めて、一定時間(今回は20分)話し合ったあと、チームをシャッフルして~を繰り返すものになります。
全体的に活発に話が盛り上がっていて、20分では足りないくらいに思えるくらいでした。
大体3~4回くらい回して全体ででた話題がこちら。
きれい!#ue4nagoya pic.twitter.com/gAootiSxIo
— 白鳥隆士@お仕事募集中 (@shiratori1221) 2017年8月27日
総括して成功したと言えました。また11月にやります!
UE4で箱を回転させる
フリーになってから初の更新です。
今回はこんな感じにきれいに箱を転がしました。
できたあああああ!!!#UE4Study pic.twitter.com/tn06WGgNam
— 故・白鳥隆士@お仕事募集中 (@shiratori1221) 2017年7月2日
とはいっても数学をあまりきちんと理解できてない人間なので、こちらのブログのスクリプトを参考にさせてもらい作りました。
Input関数
Input関数はこんな感じです。基本的には二次元的な入力しかないので縦横方向への入力をもらって、回転させたい角度を作り、回転中フラグや入力値、初期位置、初期回転を設定しています。
また、入力を受け取った際に回転中かどうかを確認しているisRotationはこんな感じ。
入力がきちんとあって、なおかつ回転中でなければ転がり始めます。
RotationCubeイベント
Input関数で初期設定後に走らせるイベントです。
タイムラインで線形補間用のアルファ値を作って回転と移動をUpdateRotation関数の中で行っています。
今回は0.5秒間に0から1へと変わるように設定しています。
UpdateRotation関数
今回やりたいことのメインとなる部分の処理になります。
細かい説明はできないので省きます。いい感じにX、Y、Z軸方向への移動と回転を行ってます。
移動距離を算出する関数はこれらです。
GetDistanceXとYはVerticalかHorizontalの変数以外は同じ処理を行っているので外部からわたしてやるともっとスッキリすると思います。
sinとかcosとかはこちらになります。
最後に終了処理
もうちょっときちんと数学を勉強しようと思いました。