虚幻引擎UE5专用服务器游戏开发-18 隐藏本地玩家角色头顶控件显示的

1.服务器、客户端里面角色和控制器之间的关系:

在客户端中,只有一个本地玩家控制器;但在服务器端(不管是监听服务器还是专用服务器),都有其他玩家的控制器。

所以,我们先判断,屏幕上的角色,是不是由本地玩家控制器控制的:

Source/Crunch/Public/Character/CCharacter.h

	//判断是否有本地玩家控制
	bool IsLocallyControlledByPlayer();

Source/Crunch/Private/Character/CCharacter.cpp

bool ACCharacter::IsLocallyControlledByPlayer()
{
	return GetController() != nullptr && GetController()->IsLocalPlayerController();
}

思考:

如果,我将上面的IsLocalPlayerController()换成IsLocalController()会如何呢?

在Unreal Engine中,IsLocalPlayerController()IsLocalController()的区别主要体现在以下方面:

  1. 所属类与功能定位

    • IsLocalPlayerController()APlayerController类的成员函数,专门用于判断当前PlayerController是否为本地控制的玩家控制器
    • IsLocalController()AController基类的成员函数,适用于所有控制器类型(包括PlayerController和AIController)的本地化判断
  2. 应用场景差异

    • IsLocalPlayerController()通常用于:
      • 分屏游戏中区分不同本地玩家的控制器实例
      • 确保输入事件、UI交互等操作仅对本地玩家生效
    • IsLocalController()更通用,可用于:
      • AI控制的本地模拟(如离线训练模式)
      • 网络游戏中判断任意控制器的本地归属
  3. 返回值逻辑

    • IsLocalPlayerController()需同时满足:
      • 控制器是PlayerController类型
      • 控制器由本地机器控制
    • IsLocalController()仅判断控制器是否由本地机器控制,不关心具体类型
  4. 典型使用示例

    // 仅PlayerController专用判断
    if (PlayerController->IsLocalPlayerController()) {
        // 处理本地玩家专属逻辑
    }
    
    // 通用控制器判断
    if (AnyController->IsLocalController()) {
        // 处理本地控制的AI或玩家逻辑
    }
    

对于需要精确区分玩家控制的场景,推荐使用IsLocalPlayerController();若需兼容AI控制器的本地化判断,则应选择IsLocalController()

void ACCharacter::ConfigureOverHeadStateWidget()
{
	if (!OverHeadWidgetComponent)
	{
		UE_LOG(LogTemp, Error, TEXT("OverHeadWidgetComponent is NULL"));
		return;
	}
	//如果是本地玩家控制的角色,不显示状态条
	if (IsLocallyControlledByPlayer())
	{
		OverHeadWidgetComponent->SetHiddenInGame(true);
		return;
	}
	//得到小部件:头顶属性条
	UOverHeadStateGauge* OverHeadStateGauge = Cast<UOverHeadStateGauge>(
		OverHeadWidgetComponent->GetUserWidgetObject());
	if (OverHeadStateGauge)
	{
		//调用能力系统组件,并配置它
		OverHeadStateGauge ->ConfigWithASC(GetAbilitySystemComponent());
		OverHeadWidgetComponent->SetHiddenInGame(false);
	}
}

 效果

拖入AI角色:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值