久久没做UE4了,好多概念忘了个差不多。从单机版Demo改成网络版,中间经历了许许多多的基础知识忘记,导致的无意义的时间流逝。这里深刻做检讨。记录几个之前没怎么注意的事情:
1、GameMode是只存在在服务器的东西,没事别在这里写一些客户端用到的变量。尤其是要从单机改网络版的时候,这里的东西Replicated是完全无意义的。需要从Controller或者Pawn传下来。
2、PlayerState里如果有主角状态相关的东西,最好有其他的组件之类的东东在Controller或者Pawn里与之对应和保存。单机可以存数据,改网络版的时候,这部分内容会改到怀疑人生。
3、GameState是可以下发到客户端。可一个全场景用到的数据状态,会有什么角色自身的东西是可以随便往这里存的?不要怀疑,它的范围太大了,非必要,不使用
4、UCLASS 中的反射声明如果是GENERATED_UCLASS_BODY(),则不需要重写带参数的构造函数“xxxxxxx(const FObjectInitializer& ObjectInitializer = FObjectInitializer::Get())”,编译会报错的……这里可以改成GENERATED_BODY(),声明上述构造函数是可以的
5、关于USTRUCT()。如果TArray中需要引用USTRUCT的话,需要在引用的Class的头文件中完成声明和定义。或者在其他文件中完成声明和定义,但是包含该struct的头文件,必须在Class的头文件中包含。C++的前向声明,UE4是会不给你面子的,直接编译报错-_-|||
暂时就这么多,后续会再做补充
===========================我是分割线===========================
6、DS上玩家下线,保留玩家Actor。APlayerController的派生类中,覆盖函数“OnNetCleanUp”,在函数中做完自己想要的修改后,再调用Super::OnNetCleanUp()。