UE5 の VR テンプレートを Oculus Quest 2 で実行する 🥽

Oculus Quest 2 を買ったのでさっそく動かしてみた。 UE 5.0EA 環境で行った。

公式のドキュメントなど

バイスのセットアップ

企業・組織の参加・作成

とりあえず個人名で新規に組織アカウントを作った。

f:id:dany1468:20211022103640p:plain

特に問題なく作成完了。

開発者モードの有効化

iPhone でペアリングしている。上記の組織アカウントを作成、または組織アカウントに参加すれば以下のように Developer Mode が現れる。

それをオンにするだけ。

ケーブルで接続し PC からのアクセスを許可

Amazon.co.jp: Rampow usb c ケーブル【1m/黒】typec ケーブル 急速充電 QuickCharge3.0対応 USB3.1 Gen1規格 USB Type C ケーブル Sony Xperia XZ/XZ2, Samsung S10, Asus Zenfone 2, Fujitsu Arrows タイプc多機種対応 在宅勤務支援 : パソコン・周辺機器

今回は Oculus Quest 2 と一緒に買った上記のケーブルで接続した。特に問題は無し。

Oculus ADBドライバー(Windowsのみ)のインストール

こちらに関してはダウンロードしてインストールしただけ。ドキュメント通り .inf 拡張子のファイルでインストール実行。

f:id:dany1468:20211022104313p:plain

Android Studio のインストール

ここに関しては、選択肢はいくつかあるが、特に設定無しでまずは実行したければ 3.5.3 をインストールすると良い。 ( https://developer.android.com/studio/archive?hl=ja )

上記の UE のドキュメントで、Android Studio のインストール後に 「Android NDK r21b を使用するように Unreal を設定する」のセクションがあり、そこで利用するエンジンの\Engine\Extras\Android\SetupAndroid.bat を実行するが、今回対象とした UE_5.0EA には以下の記述があるため。

IF EXIST "%STUDIO_PATH%" (
    echo.
    ) ELSE (
    echo Android Studio not installed, please download Android Studio 3.5.3 from https://developer.android.com/studio
    %PAUSE%
    exit /b 1
)
echo Android Studio Path: %STUDIO_PATH%

新しいバージョンを利用する場合は、上記の UE のドキュメント以外にも以下がとても参考になった 👏👏👏

SetupAndroid.bat でエラーがでる

Installed Build Tools revision 31.0.0 is corrupted. Remove and install again using the SDK Manager

全体は省略するが、上記のようなメッセージが出た。
ここに関しては詳細は自分にはわからないが、以下の記事によると 31.0.0 より下のバージョンを(現状では)使えばよいらしい 👏

[UE4] Android Build-tool 31.0.0 でパッケージが出来ない件 - Qiita

VR テンプレートの実行

とりあえず動かしたかっただけなのでスターターコンテンツは省き、プロジェクト作成。ただ、初回のシェーダーコンパイルにやったらと時間がかかった。

f:id:dany1468:20211022113857p:plain

Oculus Quest 2 が接続できていれば上記のメニューが出てくるので、それを実行すると(初回はまあまあ時間かかるが)実機で操作ができる。

VR 内で武器を持って玉を発射したりするのは初めてでとてもワクワクした。部屋が狭いので静止モードでプレイしたが、ある程度移動できれば、いろいろできるんだろうかなぁ。

Steamworks API を JavaScript で操作する 🕹️

動機

Steamworks API を触ってみたいのだけど、ゲームエンジン経由で触るのも、SDK 直で触るのも自分の技量では難しかったので、とりあえず触る環境が欲しいところで以下の記事を見つけた。

HTML5製のゲームにSteamSDKを導入する手順(NW.js + Greenworks) - Qiita

Ruby でも無いか軽く探してみたが、良さそうなのがパッと見つからなかったので上記を試してみた。

この記事は上記の内容を自分でやってみた程度の内容でしかない。

環境

  • Windows 11 Pro 21H2
  • Node はローカルにも入っていたが、今回は NW.js を SDK ごと利用した

大事なところは最初に

今回、上記の記事を辿って再現する中で困ったのは、バージョンミスマッチで最初は全く動作しなかったことだった。

今回使った各バージョン

SteamworksSDK v1.52 https://partner.steamgames.com/downloads/steamworks_sdk.zip
NW.js v0.55.0 https://dl.nwjs.io/v0.55.0/
Greenworks Win64 NW.js 055.0 https://greenworks-prebuilds.armaldio.xyz/

Greenworks Prebuilds

Greenworks の Github repo の releases には最新のバイナリは入っておらず、代わりに Prebuilds サイトが提供されている。今回は以下のビルドを使っている。 f:id:dany1468:20210917182249p:plain

参考にしたサイトでは以下のサイトが紹介されており、おそらく同じような感じだと思うのだが、私が触った時点では微妙に異なっていて最初はそこで行き詰まってしまった。
(上記の Prebuilds サイトにはその時点で ABI Version v92 の Win64 は無かったのに、以下のサイトにはそれがあったり)

https://github.com/ElectronForConstruct/greenworks-prebuilds

上記のテーブルに貼ってある Prebuilds サイトは、URL こそ怪しい感じではあるが、公式の Github repo にもリンクされている。

つまり、今回重要だったのは、NW.js と Greenworks のバージョンをあわせるという点だった。
ちなみに、SteamworksSDK は公式だと v1.42 が対象のようになっているが、特に最新でも問題なかった。

Steamworks SDK から取得するバイナリ

https://github.com/greenheartgames/greenworks/blob/master/docs/quick-start-nwjs.md

上記のクイックスタートに書いてある。環境によって取得するファイルも異なる。

参考までに tree

├── index.html
├── package.json
├── steam_appid.txt
├── js/
│   └── index.js
├── lib/
│   ├── greenworks-win64.node
│   ├── sdkencryptedappticket64.dll
│   ├── sdkencryptedappticket64.lib
│   ├── steam_api64.dll
│   └── steam_api64.lib
├── chromedriver.exe -- ここから下は NW.js の展開ファイル
├── credits.html
├── d3dcompiler_47.dll
├── ffmpeg.dll
├── greenworks.js
├── icudtl.dat
├── libEGL.dll
├── libGLESv2.dll
├── locales/
├── nacl_irt_x86_64.nexe
├── node.dll
├── notification_helper.exe
├── nw.dll
├── nw.exe
├── nw_100_percent.pak
├── nw_200_percent.pak
├── nw_elf.dll
├── nwjc.exe
├── payload.exe
├── pnacl/
├── resources.pak
├── swiftshader/
└── v8_context_snapshot.bin

実行

nw.exe を実行すると以下のウィンドウが立ち上がる。Chromium なので開発者ツールも出すことができる。

f:id:dany1468:20210917183734p:plain

UE5 で Source Control Git を使う

環境: Windows 10 Pro

Git を入れておく

どう入れるかは自由ですが、さくっと scoop で入れます。

scoop のインストール

Scoop

PS > Set-ExecutionPolicy RemoteSigned -scope CurrentUser
PS > Invoke-Expression (New-Object System.Net.WebClient).DownloadString('https://get.scoop.sh')

Git

PS > scoop install git

ログにも出ていますが、これで %userprofile%\scoop\apps\git\current\bin\git.exe に Git が入っています。

UE5 で設定

Edito の右下に以下のような表示が出ているのでクリック。「Connect to Source Control」が出てくるのでさらにクリック。 f:id:dany1468:20210718090124p:plain

以下のようなフォームが出てきます。リポジトリの初期化のための情報や .gitignore, .gitattribute, README.md の追加を聞かれています。 f:id:dany1468:20210718090749p:plain

どうなっているか

PS> git show
commit 4f05bf38dab4d06e366a1cef98da2ed73dd72eff (HEAD -> master)
Author: xxxx
Date:   Sun Jul 18 09:09:14 2021 +0900

    Initial commit

diff --git a/.gitattributes b/.gitattributes
new file mode 100644
index 0000000..3e8f1d6

initial commit をさせたので、プロジェクトがその時点でコミットに加えられています。

gitignore

Binaries
DerivedDataCache
Intermediate
Saved
.vscode
.vs
*.VC.db
*.opensdf
*.opendb
*.sdf
*.sln
*.suo
*.xcodeproj
*.xcworkspace

上記が ignore に加えられていますね。

新しいレベルを追加してみる

新規レベルだと、特に何か表記はでませんね。 f:id:dany1468:20210718091730p:plain

コンテクストメニューに、Source Control がでてきます。Checkin をすると f:id:dany1468:20210718092206p:plain コミットメッセージを入力できるようになります。どうやら Git の stage はすっ飛ばす感じ。 f:id:dany1468:20210718092217p:plain 一度コミットすると、今度はコンテクストメニューに History が入ってきます。 f:id:dany1468:20210718092227p:plain 履歴を見れます。 f:id:dany1468:20210718092532p:plain

レベルにCubeでも追加してみる

何かを示すアイコンが付きました。 f:id:dany1468:20210718092618p:plain

以下のページからの引用ですが、どうやらチェックアウトしたアイコンになるようです。なるほど、この辺は Git っぽくなっている訳ではなさそう。 Source Control | Unreal Engine Documentation f:id:dany1468:20210718092755p:plain

ただ、一度コミットしたファイルは変更して保存するたびに Source Control もなにかしているようなので、割とリモートリポジトリに都度競合状態等を問い合わせたりするのかもしれない。 **差分を見る 一度コミットすると、Diff Against Depot というメニューも出てくる。 f:id:dany1468:20210718094814p:plain これを実行するとかなりいい感じに差分を出してくれる。どれぐらいの粒度(例えばノードの変更とかも)で出してくれるのかはまだよく見ていない。 f:id:dany1468:20210718094735p:plain

以下の記事を拝見すると、いろいろと差分を見ることはできそう。 [UE4]Level BlueprintをDiffする(差分を見る)方法について - Qiita

UE5 で Chaos Destruction Demo を動かす

マーケットプレイスで提供されるものは現状では 4.26 までのサポートなんですが、「完全なプロジェクト形式」でも作成してしまってから UE5 で起動すればたいていは動いたりします。

ラーニングで提供されている Chaos Destruction Demo も同様かと思ってみたものの、このプロジェクトは普通の 4.26 でも動作しないので一筋縄ではいかず。

Chaos Destruction Demo in Unreal Engine 5 - Community / Community Content, Tools and Tutorials - Unreal Engine Forums

上記のフォーラム記事の方法でうまくいったのでメモ。

  • In the launcher, switch to the Learn-Tab and download the Chaos Destruction Demo
  • A new project with the same name should be created. Right click and click on “Go to Folder”
  • In the explorer, right-click on the .uproject file and open with notepad (or similar) and delete the “MeshEditor”-plugin entry.
  • Then, right-click on the .uproject file and click on “Switch engine version”
  • Chose UE5EA. This will end up with an error, which you simply dismiss.
  • Right-click the .uproject file again and click on “Create visual studio files”. This will also end up with an error which you also dismiss.
  • Then go into the Source folder and open both .cs files.
  • Here you need to delete or comment out the PhysX, APEX, Cloth, QueryStructure and BuildEnviroment variables. It should look like this:

記事内では上記の順に書かれているが、私の手元では、 Create visual studio files (エクスプローラーでは Generate Visual Studio project files )をしても、 sln が作成されず、もう一度実行することで生成された。 ただ、先に Source/*.csコメントアウトを実施してから Generate Visual Studio project files を実行することでスムーズに進められる気もする。

Visual Studio のビルドは、手元の環境では Development Editor, Win64 でビルドした。

機嫌よく動いてくれていてありがたい。 f:id:dany1468:20210715062424p:plain

Chat log 2021/03/28

建築の面白そうなアプリ

アニメとゲームエンジンなど

ゲーム周辺

気になるゲーム

Unreal Engine のビルドが Visual Studio 2019 の 16.5 系で失敗する

今回失敗したのは Unreal Engine 4.24.3 です。

https://github.com/EpicGames/UnrealEngine/releases/tag/4.24.3-release

失敗の内容

4.24.2 でも失敗していた

実はこの 4.23 を入れる前には 4.24.2 を入れていて、その Editor を再ビルドした時にこけたのが発端でした。

その時は PBDCollisionConstraint のビルドで落ちていました。

errors with building UE 4.24 in VS 2017 - Unreal Engine Forums

上記のフォーラムでの報告があり、事象としては一致しているのですが、解決したケースである「VS2019にした」という点ではすでに自分はなっており、仕方ないので 4.24.3 が出ていたので、そちらを改めてビルドしようとしたのでした。

4.24.3 での失敗

Error compiling UE 4.24.1 after updating visual studio 2019 - Unreal Engine Forums

内容としては、上記フォーラムの内容と一致しています。なので、4.24.2 で落ちていた原因は、おそらくまた別の要因だと思います。

ここで言及されているのは、Visual Studio の version と Unreal Engine の version の関係でした。

ちょうど自分は 4.24.2 のビルドが成功していた時から、失敗するまでに Visual Studio 2019 の version を 16.4 系から 16.5 系(実施時は 16.5.3) にあげており、そこが大きく関係していそうです。

フォーラムにも記載がありますが、以下の commit で解消されているらしいです。

https://github.com/EpicGames/UnrealEngine/commit/25cefc81fe24c767eb995b0bb66b5611e0596973

よって、今回は、Visual Studio の version はそのままに、Unreal Engine を 4.25 系(今回は preview6 ) で再ビルドし、無事成功しました。

UE4 の Third Person Template を Dedicated Server としてビルドして Windows Server で動かすまで

環境

やりたいこと

  • 単純な Third Person Template を Dedicated Server としてビルドする
  • Windows Server にデプロイしてアクセスできるようにする

手順

https://wiki.unrealengine.com/Dedicated_Server_Guide(Windows%26_Linux)

上記の記事にほとんどのことは書いてあります。

Visual Studio の設定

Unreal Engine 用に Visual Studio をセットアップする | Unreal Engine ドキュメント

細かく推奨設定なども書かれていますが、今回はビルドさえできればいいので「Unreal Engine から Visual Studio へのワークフローを設定する前に」の部分だけで十分です。

Visual Studio がたいていすでにインストールされていると思うので Visual Studio Installer を起動し、必要なコンポーネントを追加していきます。

私は日常的には Visual Studio .NET 開発用に使っているため、ゲーム用コンポーネントは新たに追加したのですが、以下の Windows 10 SDK が無いことでビルドが停まったので、入れておくといいかもしれません。

f:id:dany1468:20200303070930p:plain

Unreal Engine のコードのダウンロード

Unreal Engine のソースコードをダウンロードする | Unreal Engine ドキュメント

以下の release page から取得すれば問題ないでしょう。
https://github.com/EpicGames/UnrealEngine/releases

参考: UE4 VisualStudioを使ってエンジンをデバッグする - Let's Enjoy Unreal Engine

ディスクの容量を確認する

私の PC がディスクが 40G ぐらいしかなくて途中で容量不足になりました。。

50G 以上は空きがあるといいかなと思います。

Unreal Editor のビルド

Section 1 Building a dedicated server in Unreal Engine 4
https://wiki.unrealengine.com/Dedicated_Server_Guide(Windows%26_Linux)#Section_1_Building_a_dedicated_server_in_Unreal_Engine_4

上記手順通りです。Setup.batGenerateProjectFiles.bat と順に実行していき、Editor をビルドします。かなり時間はかかります。
VS 2017 での注意書きがありますが、2019 (というか現在?)では特に注意するようなものはありませんでした。

Third Person プロジェクトの作成・パッケージ

Wiki の「Section 2 setting up a dedicated server on windows」通りです。作成する ServerTarget ファイルは「5. Target file instructions for engine version 4.18」の内容を使います。

私が初心者だったのでいくつか注意点がありました。

  1. Wiki では test という名前でプロジェクト名を指定しているが、これは最終的にパッケージするときに失敗してしまう
  2. 「4. Switch Unreal engine versions & generate project files」で、手順通り Engine を switch をしないといけないが、ビルドした Unreal Editor でプロジェクトを作ったからとスキップした結果、必要なファイルが生成されなかった。

Third Person プロジェクトを localhost で起動する

「Section 3 launching and joining the dedicated server」通りですね。

Windows Server の用意

今回は GCP に用意しました。イメージとして「Windows Server 2019 Datacenter」を選んだ以外はデフォルトです。

f:id:dany1468:20200303074017p:plain

ファイヤーウォールの設定等していなければ、自動で付与されるエフェメラルの外部 IP で接続できるようになるはずです。

GCPFirewall の設定をする

以下のように tcp:3389 (RDP 用) と udp:7777 (UE4 用) の ingress を許可するファイヤーウォールルールを作成します。
f:id:dany1468:20200303074403p:plain

ネットワークタグに unreal-win を指定したので、そのタグを先程作成した VM のネットワークタグにも設定しておきます。

RDP で接続する

Chrome の RDP アプリではなく Windows の Remote Desktop app を使って接続しました。事前に接続前にはパスワード設定をしておきます。

f:id:dany1468:20200303074249p:plain

参考:

Windows Server にデプロイ

ビルドした UE4 のプロジェクトは WindowsNoEditor というフォルダがルートになっていると思いますが、それごと Windows Server にもっていきます。

次に以下のサポートサイトから Visual C++ 再頒布可能パッケージ をダウンロードします。VC_redist.x64.exe というファイル名です。
https://support.microsoft.com/ja-jp/help/2977003/the-latest-supported-visual-c-downloads

ダウンロードしたら Windows Server 上で実行します。

次に、コピーしてきたビルド成果物の WindowsNoEditor\Engine\Extras\Redist\en-us\UE4PrereqSetup_x64.exe を実行します。最後に .NET Framework に関するメッセージが出ましたが、私は問題ありませんでした。

試していませんが、もしかすると、UE4PrereqSetup_x64 だけやっておけば、その前の Visual C++ 再頒布可能パッケージ のインストールは不要かもしれません。

Windows Server の Firewall の設定

VMFirewall としては UDP 7777 を許可しましたが、Windows としてはまだ許可できていません。

以下のように Server Manager の Tools から「Windows Defender Firewall with Advanced Security」を起動します。

f:id:dany1468:20200303075614p:plain

そこで Inboud Rules の新規ルールを作成し、UDP 7777 を追加します。(以下の画像は作成後のものですが参考までに)

f:id:dany1468:20200303080048p:plain

Windows Server でゲームを起動し、接続する

起動はローカルで実行したのと同様ですが、ローカル接続時に作成したショートカットはパスが変わってしまっているので、新たに -log 付きのショートカットを作成し起動します。

起動できたら、続いてクライアント側ですが、entryMap のレベルブループリントを開き、 Open Level の 127.0.0.1GCPWindows Server のグローバル IPに port 7777 を付けて指定します。

f:id:dany1468:20200303080438p:plain

再度ビルドしてもいいですが、ここは簡易に Unreal Editor から起動し、接続できるか確認しましょう。