よく分からないんだが、セッション作成中に余計な真似をするとサーバーが落ちてしまう。俺がやってることが悪いのか、変なバグが潜んでるのか分からないが、セッション作成後にいろいろ始めるようにする必要に迫られた。
ブループリントでもセッション作成はできるらしいんだが、俺はC++で作っちゃったから、C++でのセッション作成後に、それをGameModeに知らせなきゃならない。
GameModeもC++を持ってるけど、それを親クラスにしてブループリントのGameModeクラスを作った。主な処理はブループリントで作ってみようと思う。
で、C++のセッション作成完了からGameModeにイベントを発行してセッション作成完了を知らせるわけだが、そのやり方。
// セッション作成完了後のコード
// Sessionクラスで自分のGameModeクラスを得る
AGameModeBase* _GameModeTemp = GetWorld()->GetAuthGameMode();
auto _MyGameMode = Cast<AMyGameMode>(_GameModeTemp);
// 自分のGameModeクラスの関数を呼び出す。この関数がブループリントにイベントを投げる。
_MyGameMode->SessionCreated();
// 自分のGameModeのヘッダで定義する
// ブループリントへのイベント
UFUNCTION(BlueprintImplementableEvent)
void EventSessionCreated();
// セッション作成直後にGameSessionから呼ばれる。そしてブループリントにイベント発行。
void SessionCreated() { EventSessionCreated(); };
PlayerControllerにしても、Characterクラスにしても、この辺りの書き方がよく分からなくて時間が掛かることがよくあった。
コメント