跳至主要內容
M.MultiWorld|游戏中打开仓库

导言

当你试图在游戏中切换英雄或打开背包时,你面临的第一个问题就是怎么打开这些带有独立光照、背景的场景,并且不影响原本的世界。

问题

  1. 场景切换问题。
  2. UI切换问题。
  3. 控制器切换问题
  1. 守望先锋

Mr.Si大约 5 分钟u++
c11.编辑器配置属性|DevelopSettings

方案1 ISettingsModule

  1. 模块激活/销毁时

void FCommonGameModule::StartupModule()
{
	RegisterSettings();
}
void FCommonGameModule::ShutdownModule()
{
	if (UObjectInitialized())
	{
		UnregisterSettings();
	}
}

Mr.Si大约 1 分钟u++
Error13. GAS|属性顺序导致的GE错乱

省流

先设置Max的属性,再设置正常的属性。

问题描述

问题排除

检查AttributeSet


#define ATTRIBUTE_ACCESSORS(ClassName, PropertyName) \
GAMEPLAYATTRIBUTE_PROPERTY_GETTER(ClassName, PropertyName) \
GAMEPLAYATTRIBUTE_VALUE_GETTER(PropertyName) \
GAMEPLAYATTRIBUTE_VALUE_SETTER(PropertyName) \
GAMEPLAYATTRIBUTE_VALUE_INITTER(PropertyName)

	class EXORCIST_API UExorcistAttributeSet : public UAttributeSet
{
	GENERATED_BODY()

public:
	UExorcistAttributeSet();

	//重写复制函数
	virtual void GetLifetimeReplicatedProps(TArray<FLifetimeProperty>& OutLifetimeProps) const override;

	//属性修改前调用的函数,用于钳制输出或者一些规则设定,但他不会真正的修改某个Attributes属性
	virtual void PreAttributeChange(const FGameplayAttribute& Attribute, float& NewValue) override;
	
	//设置Health
	UPROPERTY(BlueprintReadOnly, Category = "Health", ReplicatedUsing = OnRep_Health)
	FGameplayAttributeData Health;

	ATTRIBUTE_ACCESSORS(UExorcistAttributeSet, Health);
	
	//设置最大Health
	UPROPERTY(BlueprintReadOnly, Category = "Health", ReplicatedUsing = OnRep_MaxHealth)
	FGameplayAttributeData MaxHealth;

	ATTRIBUTE_ACCESSORS(UExorcistAttributeSet, MaxHealth);
}
UExorcistAttributeSet::UExorcistAttributeSet()
{
	InitHealth(100.f);
	InitMaxHealth(100.f);
}

void UExorcistAttributeSet::GetLifetimeReplicatedProps(TArray<FLifetimeProperty>& OutLifetimeProps) const
{
	Super::GetLifetimeReplicatedProps(OutLifetimeProps);
	DOREPLIFETIME_CONDITION_NOTIFY(UExorcistAttributeSet, Health, COND_None, REPNOTIFY_Always);
	DOREPLIFETIME_CONDITION_NOTIFY(UExorcistAttributeSet, MaxHealth, COND_None, REPNOTIFY_Always);
}
void UExorcistAttributeSet::OnRep_Health(const FGameplayAttributeData& OldHealth)
{
	GAMEPLAYATTRIBUTE_REPNOTIFY(UExorcistAttributeSet, Health, OldHealth);
}

void UExorcistAttributeSet::OnRep_MaxHealth(const FGameplayAttributeData& OldHealth)
{
	GAMEPLAYATTRIBUTE_REPNOTIFY(UExorcistAttributeSet, MaxHealth, OldHealth);
}

Mr.Si大约 2 分钟u++
c8.1GAS|GameplayAbility实践-翻滚、受击

回顾

网络权限

GiveAbility

	UFUNCTION(BlueprintCallable, BlueprintAuthorityOnly, Category = "Gameplay Abilities", meta = (DisplayName = "Give Ability", ScriptName = "GiveAbility"))
	FGameplayAbilitySpecHandle K2_GiveAbility(TSubclassOf<UGameplayAbility> AbilityClass, int32 Level = 0, int32 InputID = -1);

Mr.Si大约 6 分钟u++
EXP10.用户输入向量区别

GetLastMovementInputVector

/**
 * 返回上一次由 ConsumeMovementInputVector() 处理的世界空间中的输入向量,这通常由 Pawn 或 PawnMovementComponent 完成。
 * 任何需要了解上次影响移动的输入的用户都应该使用此函数。
 * 例如,动画更新会使用这个函数,因为默认情况下,帧中更新的顺序是:
 * PlayerController(设备输入)-> MovementComponent -> Pawn -> Mesh(动画)
 *
 * @return 上一次由 ConsumeMovementInputVector() 处理的世界空间中的输入向量。
 * @see AddMovementInput(), GetPendingMovementInputVector(), ConsumeMovementInputVector()
 */
UFUNCTION(BlueprintCallable, Category="Pawn|Input", meta=(Keywords="GetMovementInput GetInput"))
ENGINE_API FVector GetLastMovementInputVector() const;


Mr.Si大约 2 分钟u++
NT-2.4|网络优化|结构体

本章概要

以方向为例,优化方向结构体的网络传输

问题

UENUM(BlueprintType)
enum class EDirectionType : uint8
{
	Forward UMETA(DisplayName = "Forward"),
	Backward UMETA(DisplayName = "Backward"),
	Left UMETA(DisplayName = "Left"),
	Right UMETA(DisplayName = "Right"),
	Invalid UMETA(DisplayName = "Invalid")
};

Mr.Si大约 2 分钟unreal
NT-2.4|网络优化|网络抖动

1. bIgnoreClientMovementErrorChecksAndCorrection

  • 用途:

    • 当这个参数设置为 true 时,服务器会忽略来自客户端的移动误差修正请求。
    • 默认情况下,服务器会监控客户端的移动状态,如果发现客户端的位置和服务器位置之间有显著差异,服务器会进行位置纠正,将客户端“拉回”正确的位置。
    • 开启这个参数后,服务器将不再做这种误差校正,从而避免频繁的客户端位置纠正。但这样做可能会允许客户端稍微偏离服务器记录的位置。
  • 适用场景:

    • 在某些网络游戏中,如果移动非常频繁,位置纠正可能会导致玩家感觉卡顿。使用 bIgnoreClientMovementErrorChecksAndCorrection 可以减少这种不必要的“位置拉扯”。
    • 它更适合那些对位置精确度要求不高的场景,比如开放世界中的一些非战斗场景。

Mr.Si大约 2 分钟unreal
LY2.Lyra-UIMessaging

项目说明:

ExorcistUIMessaging 是一个用于在游戏中展示全局消息框(MessageBox)的子系统,支持错误、确认等提示信息。 它基于 MVC 设计模式实现,通过异步蓝图节点来展示消息,能够简化用户与系统之间的交互。

功能:

主要模块:

  1. UAsyncAction_ShowConfirmation
UFUNCTION(BlueprintCallable, BlueprintCosmetic, meta = (BlueprintInternalUseOnly = "true", WorldContext = "InWorldContextObject"))
static UAsyncAction_ShowConfirmation* ShowConfirmationYesNo(
    UObject* InWorldContextObject, FText Title, FText Message
);

Mr.Si大约 2 分钟unreal