見出し画像

初心者がUnreal Engine 5でPCゲームを作る Day1 ~ 前書き / Spineインポート

がんばります。

筆者について

来歴

  • スマホゲーム会社在籍5年ぐらいの企画職

  • Steamでよくゲームを遊ぶ
    以下プレイ時間長いもの(上から順)

    • Don't Starve Together

    • RimWorld

    • ARK: Survival Evolved

    • Kenshi

    • Against the Storm

      • 拠点を作らないと死ぬ病気を発症している

  • 趣味で色々作った

スキル

  • ゲームエンジン初心者

    • UEはチュートリアルちょっと触った程度

    • Unityで1か月プロトを作った

  • コーディングは齧った程度

    • 必要な範囲で学ぶ

    • 可能ならブループリントで色々済ませたい

  • Gitは仕事で使っていた

    • ブランチのcloneとかはできる

Unreal Engine選定理由

  • 2Dでリッチな画面を作るためのポストプロセスチュートリアルが豊富

    • オクトパストラベラーがUEで作られた影響

  • ブループリントによるコーディングコストの軽減

    • 経験値の足りないコーディングを減らせれば開発が早まるはず

  • 助成金プログラムの存在

    • 最終的に商業規模を目指したいため、資金調達の選択肢が増えることは頼もしい

  • 商業クリエイターとして保険がかけられそう

    • 最悪個人開発が失敗しても「Unrealが使える人」としてコンシューマー系での就職が見込める

    • Unity使用者は戦うには母数が多すぎ、かつ景気の悪いスマホゲーム市場から逃げられなさそうと感じた

実装するもの


実装にあたり用意したキャラクター「モモコ」

実装予定の要素

  • 平面マップを斜め上から見降ろす

  • QWERで移動

  • キーかマウスボタンで杖振って何らかのアクション

  • フラグ踏んだらテキスト出してビックリ顔

  • 草地とか溶岩地帯とか様々なタイルを組み合わせたマップ

  • 他のモノとすれ違える奥行き

  • ロードを介さずオーバーレイでポップアップするUI

ベンチマークにする既存ゲーム

  • Don't Starve Together

https://store.steampowered.com/app/1172860/Dont_Starve_Together_Starter_Pack_2019/?l=japanese

カメラの置き方や移動など、このゲームをイメージして作ってみる

備忘録 Day1

Day1のまとめ

  • とりあえずSpineのインポートはできた

  • UEでC++プロジェクトを作る場合、MSVCのビルド用コンポーネントが必要

  • UEとビルド用コンポーネントならびにMSVCのバージョンを合わせよう

  • コマンドプロンプトで立ち上がるはずのプログラムが立ち上がらない時はパスを疑う

  • マニュアルをちゃんと読まんかクソボケが

環境

  • Unreal Engine 5.4.1

  • Spine Pro 4.2.20

当面の目標

UEでのプロジェクト作成

早速詰まる

C++でプロジェクトを作成時、
ビルドエラーが出てプロジェクト作成ができない。

https://rider-support.jetbrains.com/hc/en-us/community/posts/18727708139282-Toolchain-issues-with-Unreal-Engine-5

MSVCビルドツールが「最新」しか入っていなかったのが原因のようなので、
下記に従いUE5.4用のものをインストールした。

https://ue5study.com/how/unrealengine-packaging-visualstudio-settings/

無事ビルド成功。空のC++ゲームプロジェクトが作成された。

普通に生きていると「ツールは最新版入れとけ」が当たり前だが、この手の開発はバージョン合わせという概念があるのを思い知らされる。
UE自体にもバージョン固有バグがあるらしいので意識していく。

spine-runtime導入で詰まる

一度UEを閉じて、マニュアルに従いプロジェクトフォルダにspine-runtimesを導入する。
プロジェクト起動時にエラーメッセージが出る。

The following modules are missing or built with a different engine version:

    SpinePlugin
    SpineEditorPlugin

Would you like to rebuild them now?

どうやら有名で厄介なエラーらしい。

https://qiita.com/n1sh1_vr/items/9d6299891df28acaeae3

とりあえず「Rebuild them now?」とのことなのでYesを押してみる。

lwf_UE541 could not be compiled. Try rebuilding from source manually

だめだった。
Noを押すと

Would you like to proceed anyway?
Code and content that depends on these modules may not work correctly.
Enter at your own risk.

とのことなので「Yes」と言ってみる。

モジュール 'SpinePlugin' が見つからないためプラグイン 'SpinePlugin' のロードに失敗しました。
プラグインが正しくインストールされていることを確認するか、このプロジェクトでは対象プラグインを無効にしてください。

だめだった。何かしら対応をしなきゃいけないらしい。

同じエラーを踏んだ記録があった。

https://ja.esotericsoftware.com/forum/d/14625-i-cant-put-spine-in-unreal-engine/10

この記事ではVisual Studioのセットアップに問題があったようだった。
自分のVSを見直してみるとバージョンが「17.9.6(最新)」だが、
UE導入の英語版マニュアルには「17.8」を入れろと書いてある。

バージョン合わせをした記憶がない。
何故かと思ったら、Spine公式マニュアルにある日本語記事ではUE5.4についての記載がなかった。
ので、とりあえず最新版をインストールした模様。
これが良くなかったかもしれない。

他にも見落としがありそうなので、上記英語版マニュアルの内容に則ってVisual Studioを再度セットアップしてみる。

Visual Studio 2022を消し去る

まずは、いま入っているVSをアンインストールした。

導入するバージョンを確認する。
Visual Studio 17.8.Xでバージョンが複数あるが、UE側での指定は「17.8」。
どれをインストールするべきかは不明瞭だ。

最新の「17.8.9」をインストールしてみることにする。
これでダメなら今後何かインストールするときは最新ではなく指定がある中で最古にしてみよう。

しかし、Visual Studio Installerからは最新の「17.9.6」しかインストールできない。
バージョンを指定してVSをインストールするには、wingetなるものを使うらしい。

https://mseeeen.msen.jp/downgrade-visual-studio-2022-with-winget/

Wingetの導入とVS2022のダウングレード

Wingetが使えない

Windows Package Managerは、Microsoft が開発している、コマンド1つでソフトのインストールやアンインストールができる便利なツールらしい。

Microsoft Storeのインストール済みアプリに「アプリ インストーラー」自体はあるものの、「開く」を押しても何も開かない。

公式のマニュアルを見るに、コマンドラインから使うものと推察した。

https://learn.microsoft.com/ja-jp/windows/msix/app-installer/install-update-app-installer

マニュアルの `winget upgrade Microsoft.AppInstaller` をコマンドプロンプトで叩いてみるが、

'winget' は、内部コマンドまたは外部コマンド、
操作可能なプログラムまたはバッチ ファイルとして認識されていません。

とのこと。
これはどうもWinGetがちゃんと入っていないのではなかろうか。

マニュアルより `お使いの PC が Microsoft Store にアクセスできない場合は、下のダウンロード ボタンを使用します` から再導入を試みると、

アプリ インストーラーは既にインストールされています

とのこと。ちゃんと入ってはいるらしい。
管理者権限もつけてもう一度コマンドを打ってみるが、やはり同じエラーが出る。

トラブルシューティングを参照する。

https://learn.microsoft.com/ja-jp/troubleshoot/windows-client/shell-experience/troubleshoot-apps-start-failure-use-windows-package-manager

導入したら普通は動くらしい。
PowerShellという奴からも実行してみるが、トラブルシューティング内記載のものと同じエラーが出る。

やはり導入がうまくいっていないようなので、Githubからダウンロードしてみたが、先ほどと同じく

アプリ インストーラーは既にインストールされています

とのこと。

ユーザー環境変数パスの追加

エラーを踏んだ事例をさらに調べてみる。

https://qiita.com/hiroakisan@github/items/b4e5fbcd793c268a2893

ユーザー環境変数というのが良くわからなかったので下記を確認する。

https://atmarkit.itmedia.co.jp/ait/articles/1805/11/news035.html

コマンドプロンプト起動時に出ている「C:\Users\USERNAME」以下のパスのことを指している模様。
ユーザー環境変数にパスを追加することで、フルパスを指定せずともコマンドプロンプトが参照してくれる範囲が増えるということらしい。

要するに「ドライブのどこにwingetが入っているのかコマンドプロンプトが分かってないので教えてやる」という作業をすればいいらしい。
まずはwingetの位置を特定する。
先ほどの記事と同じく、
`C:\Users\USERNAME\AppData\Local\Microsoft\WindowsApps`
にwinget.exeがいた。
該当のフォルダをユーザー環境変数PATHに追加する。

するとようやく、コマンドプロンプトでwingetが効くようになった。

VS2022の再インストール

` winget show Microsoft.VisualStudio.2022.Community --versions` を叩き、使用可能なバージョンを確認する。
17.8.x系の最新は17.8.6だった。
`winget install --id Microsoft.VisualStudio.2022.Community --version 17.8.6`
でインストールを開始。
サイト挟まなくていいのでフィッシングに怯える必要がなく、動作も軽量で気分がいい。
いいですね、wingetとコマンドライン。

インストールが完了したので、UE向けの設定を、英語版マニュアルに従って進めていく。
Visual Studio Installerから設定を変更しなおし、プロジェクトを起動してみる。

C++の中身を見る

同じエラーが出た

The following modules are missing or built with a different engine version:

    SpinePlugin
    SpineEditorPlugin

Would you like to rebuild them now?

原因はVS2022のバージョンではなかったらしい。

下記に従ってC++でビルドを行ってみる。

https://qiita.com/chano2/items/517157c412ce5b03e905

ここで言うビルドがどのような操作かはよくわからないが一旦やってみる。
slnファイルは元からあったので生成する必要がなかった。
VS2022で起動し、ビルド>ソリューションのビルドを行う。

ビルド失敗でログを確認

問題がありそうな部分を抜き出す。

プロジェクトはこのソリューション構成に対してビルドするように選択されていません。

下記の操作により解消した。

https://kuttsun.blogspot.com/2017/02/blog-post.html

28>(格納フォルダ)\Plugins\SpinePlugin\Source\SpinePlugin\Public\spine-cpp-lite\spine-cpp-lite.cpp(288): warning C4996: 'strdup': The POSIX name for this item is deprecated. Instead, use the ISO C and C++ conformant name: _strdup. See online help for details.
28>(格納フォルダ)\Plugins\SpinePlugin\Source\SpinePlugin\Public\spine-cpp-lite\spine-cpp-lite.cpp(333): warning C4996: 'strdup': The POSIX name for this item is deprecated. Instead, use the ISO C and C++ conformant name: _strdup. See online help for details.
28>(格納フォルダ)\Plugins\SpinePlugin\Source\SpinePlugin\Public\spine-cpp-lite\spine-cpp-lite.cpp(350): warning C4996: 'strdup': The POSIX name for this item is deprecated. Instead, use the ISO C and C++ conformant name: _strdup. See online help for details.
28>(格納フォルダ)\Plugins\SpinePlugin\Source\SpinePlugin\Public\spine-cpp-lite\spine-cpp-lite.cpp(1028): error C4800: 'spine_bool' からブール値に暗黙的に変換されます。情報が失われる可能性があります
28>(格納フォルダ)\Plugins\SpinePlugin\Source\SpinePlugin\Public\spine-cpp-lite\spine-cpp-lite.cpp(1028): note: この警告を避けるため、0 に明示的なキャストまたは比較を使用することを検討してください
28>(格納フォルダ)\Plugins\SpinePlugin\Source\SpinePlugin\Public\spine-cpp-lite\spine-cpp-lite.h(180): note: 'spine_bool' の宣言を確認してください
28>(格納フォルダ)\Plugins\SpinePlugin\Source\SpinePlugin\Public\spine-cpp-lite\spine-cpp-lite.cpp(1034): error C4800: 'spine_bool' からブール値に暗黙的に変換されます。情報が失われる可能性があります
28>(格納フォルダ)\Plugins\SpinePlugin\Source\SpinePlugin\Public\spine-cpp-lite\spine-cpp-lite.cpp(1034): note: この警告を避けるため、0 に明示的なキャストまたは比較を使用することを検討してください
28>(格納フォルダ)\Plugins\SpinePlugin\Source\SpinePlugin\Public\spine-cpp-lite\spine-cpp-lite.h(180): note: 'spine_bool' の宣言を確認してください
……
28>(格納フォルダ)\Plugins\SpinePlugin\Source\SpinePlugin\Public\spine-cpp-lite\spine-cpp-lite.cpp(4697): warning C4996: 'strdup': The POSIX name for this item is deprecated. Instead, use the ISO C and C++ conformant name: _strdup. See online help for details.

spine-cpp-lite.cppについて「C4800」「C4996」なる警告が行われているらしいが致命傷ではなさそう。

よくわからないのでSpine-ueを再導入してみる

必要な操作を一個飛ばしていた

(プロジェクト名).Build.csの記述を書き換えるという手順を見逃していた。なぜだ。

以下のように書き換えた。

PublicDependencyModuleNames.AddRange(new string[] { "Core", "CoreUObject", "Engine", "InputCore", "EnhancedInput", "SpinePlugin" });

しかし、やはりプロジェクトは開けない。

The following modules are missing or built with a different engine version:

    SpinePlugin
    SpineEditorPlugin

Would you like to rebuild them now?

大きなカブかよ。

再度ビルドをかけてみると、エラーメッセージに変化があった。

2>[1/21] Compile [x64] SpineBoneFollowerComponent.cpp
2>(格納フォルダ)Plugins\SpinePlugin\Source\SpinePlugin\Public\SpineSkeletonDataAsset.h(33): fatal error C1083: include ファイルを開けません。'spine/spine.h':No such file or directory
2>[2/21] Compile [x64] SpineSkeletonAnimationComponent.cpp
2>(格納フォルダ)Plugins\SpinePlugin\Source\SpinePlugin\Public\SpineSkeletonDataAsset.h(33): fatal error C1083: include ファイルを開けません。'spine/spine.h':No such file or directory
……
2>[15/21] Compile [x64] SpineWidget.cpp
2>(格納フォルダ)Plugins\SpinePlugin\Source\SpinePlugin\Public\SpineSkeletonDataAsset.h(33): fatal error C1083: include ファイルを開けません。'spine/spine.h':No such file or directory

今度はわかりやすい。Spine-ue内のファイルで参照エラーを起こしている模様。

エラーコードで検索したら「ファイルを手動でコピーする必要があります」とのこと。

https://ja.esotericsoftware.com/forum/d/16979-spine-ue4-compile-error/2

C++系エンジンに共通で必要なファイルはcloneしてきたブランチ内の別フォルダ「spine-cpp」の中に入っており、「spine-ue」とのマージが必要ということだった。

ビルド成功。プロジェクトも開けた

マニュアルに必要な手順をガッツリ飛ばしていた。
ちゃんとマニュアル読めてたらこの作業全部いらなかったと思われる。
ケアレスミスに気づくまで合計5時間ぐらい無駄にしてしまった。

大本のマニュアルを軽視して起きた現象に拘泥した結果よくない手順を踏むことになってしまった。
やり直して尚ダメな時にエラー解決へ向かうようにしよう。
前途多難だ。

Spineファイルの導入

Spineでエクスポートを行うと「.atlas」「.json」の2ファイルが生成される。
この時、ファイル名に気を付ける。
5.3以降のUEはバグっており、この2つのファイルが同じ名前の場合インポートができないらしい。

https://github.com/EsotericSoftware/spine-runtimes/issues/2368

マニュアル通り、ファイルをインポートし、アクタ(とは何か、よくわかっていない)に対してSpineのコンポーネントを割り当てていく。

爆誕


やったー!

やたら壮大な背景が爆誕感を深める。
すでにちょっといい感じにライティングされています。

今日はここまで

動かしたりするのは翌日以降とする。
Unreal自体の理解が先かもしれない。アクタってなんすかみたいな状態のため。

お疲れ様でした!

この記事が気に入ったらサポートをしてみませんか?