以前は、【UE5】DEBUG用のプリプロセッサディレクティブ【C++】について書いたが、今回はサーバーの時はコンパイルしない、というのが必要になった。久々にサーバーでちゃんと動くのかな?と気になって、考えてみたらビルドできるわけがないな、となった。案の定、エラーが出た。
サーバーかどうか判定するためのディレクティブは次に書いてあった。

最近の記事でこんなのもあった。

なかなか詳しく書いてある。
俺はClientとServerは分かったんだが、Gameってのが意味不明だった。クックやClientビルドをしないで動かす場合にUnreal Editor経由でクライアントを動かそうとする時は -Game を指定しなきゃならない。次の記事に書いた。

-Gameの代わりに-Clientにしても動かないはず。Unreal Editor経由だから仕方がないのかもしれないけど。
まあとにかく、らりほま氏の話にあるようにディレクティブとしては次のように分けられている。
■Game:スタンドアロン
UE_SERVER=0, WITH_SERVER_CODE=1
■Client:クライアント
UE_SERVER=0, WITH_SERVER_CODE=0
■Server:サーバー
UE_SERVER=1, WITH_SERVER_CODE=1
ちとややこしいが、サーバーでコンパイルしたくなければ、
#if UE_SERVER==0
#endif
としておけばOK。
で、ビルドしてクックしてパッケージ化してみたんだが、見事に動かなかった。

どうやら予めVS2022でプラットフォームlinuxでビルドしておかなきゃダメらしい。そりゃそうなのか?Unreal EditorでもコンパイルっぽいことをしていたからVS2022でやる必要はないのかと思ったんだが。
しかも、EditorとServerでそれぞれやらなきゃならないらしいので、UE_SERVERじゃダメってことになった。linux用のディレクティブが必要。ググってみたら次のサイトがあった。
PLATFORM_LINUXを使えばいいらしい。
linuxでコンパイルしたくなければ、
#ifndef PLATFORM_LINUX
#endif
としておけば今度こそ動くはず。
↑違ったっぽい。再調査中。
UE5だと出てこないから、C++の方で調べたら、linux用は __linux があると言う話だった。しかしやってみたら上手く行かない。WIN64は _WIN64 がると言う話だからやってみたら、こっちは上手く行った。
linuxでコンパイルしたくなければ、
#ifdef _WIN64
#endif
としておけばOK。
で、コンパイルしてクックしてみたんだが、サーバーのシッピングというのはできないのかな?シッピングの意味は出荷らしいけど、サーバー出荷なんてしないからってことなのか。今年話題になったポケモンみたいなゲームはサーバーもプレーヤーに提供しているような話があったりしたが、あれはまた違うものなんだろか。
とりあえずクライアントはシッピングできて、サーバーは開発版でパッケージングできて、ちゃんとlinuxで動いた。良かった。
クライアントは普段よりもサクサク動いている感じがした。この前、マウスの画像をウィジェットで描いてBPでマウスカーソルにする、というのをやってみたが、なんかちょっともっさりしていてダメだなってことにしていたんだが、Unreal Editor上、またはUnreal Editor経由で動かさないで、ちゃんとしたクライアントにすれば、もっさり感がなくなるのかも?優先順位は低いけど、いつか試してみる。
コメント