RPC
记住两句话:
-
不考虑组播,只有是自主的Actor才能进行网络复制,并且只能在自主的和权威的Actor上执行
-
组播只能从服务器到客户端,可以是普通的Actor
属性复制
- 对于属性复制,最重要的,就是别忘记在GetLifetimeReplicatedProps函数中添加如下:
-
void MyActor::GetLifetimeReplicatedProps(TArray<FLiftimeProperty>& OutLifetimeProps) const { Super::GetLifetimeReplicatedProps(OutLifetimeProps); DOREPLIFETIME(MyActor, mMyProp); }
-
可以带条件拷贝DOREPLIFETIME_CONDITION,第三个参数可以带COND_InitialOnly、COND_AutonomousOnly、COND_OwnerOnly、COND_SimulatedOnly等参数
事件分发器
1. 创建
DECLARE_DYNAMIC_MULTICAST_DELEGATE_OneParam
DECLARE_DYNAMIC_MULTICAST_DELEGATE_TwoParams
DECLARE_DYNAMIC_MULTICAST_DELEGATE_ThreeParams
注意
- 需要在类的外部声明
- 类型必须要以F开头
- 参数传入的格式是:事件类型,参数1类型,参数1名称,参数2类型,参数2名称……
- 属性需要使用UPROPERTY(BlueprintAssignable)修饰
- 如果希望函数可以在蓝图中被调用,还必须要加上BlueprintCallable修饰
2. 绑定
使用AddDynamic(obj, FuncPoint)绑定某个对象的某个函数
注意
- 绑定的函数必须是被UFUNCTION修饰的函数
蓝图函数库
UCLASS()
class UXXX : public UBlueprintFunctionLibrary
{
GENERATED_BODY()
public:
UFUNCTION(BlueprintCallable)
static xxx func();
UFUNCTION(BlueprintCallable, meta = (WorldContext = "WorldContextObject"))
static xxx func2(UObject* WorldContextObject);
}
枚举
UENUM(BlueprintType)
enum class EXXX : uint8
{
EAAA UMETA(DisplayName = "AAA")
}
结构体
USTRUCT(BlueprintType)
struct FXXX
{
GENERATED_USTRUCT_BODY()
}
使用自定义Log
头文件
DECLARE_LOG_CATEGORY_EXTERN(XXXLog, Log, All);
源文件
DEFINE_LOG_CATEGORY(XXXLog);