使用GameMode的 bDelayedStart = true,10s后StartMatch,监听服务器为啥无法控制输入

1.这是我的代码,就是使用GameMode的延迟开始,10s后执行StartMatch()开始比赛

ABlasterGameMode::ABlasterGameMode()
{
	bDelayedStart = true;
}

void ABlasterGameMode::BeginPlay()
{
	Super::BeginPlay();
	StartingLevelTime = GetWorld()->TimeSeconds;
}

void ABlasterGameMode::Tick(float DeltaSeconds)
{
	Super::Tick(DeltaSeconds);
	TimeDelta += DeltaSeconds;
	TimeToStart = TimeToStart - TimeDelta / 60 + StartingLevelTime;
	UE_LOG(LogTemp,Warning,TEXT("TimeToStart:%f"),TimeToStart)
	if (TimeToStart <= 0)
	{
		
		StartMatch();
	}
}

2. 编辑器中的GameMode都设置好了,创建了BP_GameMode,用的是默认第三人称项目

ZE8ZB$2{E401O9A)QNRN

3.开始游戏,有两个玩家,一个是监听服务器一个是客户端

8DI0TB`D)(RRPFBT8D(KK

4.问题?但是监听服务器,没法控制自己了,任何输入都不管用。客户端是可以控制自己的。我觉得奇怪是因为,只要不使用bDelayed = true,开始就直接进入比赛,不管是监听服务器还是Client都能够控制自己。我该如何解决?或者从哪里可以学习?

9H`HFVCH(ISHPWLYHWR_65

你好,我也存在相同的问题,当 GameMode 的 bDelayed = true 时,我发现 character 类 Begin 函数中增强输入进行判断 Controller 的代码中 Controller 为空所导致的

而我的解决方法就是将这些代码复制到 SetupPlayerInputComponent 函数中进行再次判断

具体到底时什么问题我也不清楚,只感觉是代码时序的问题,以上希望能帮到你。

发一下你的StartMatch(),执行了什么东西。