虚幻4 C++编程经验总结

使用UE4开发FPS游戏将近1年半的时间了.伴随着对于UE4的越来越深入的理解.以前的编程观念发生了很大的改变.写下来做一个记录

1,为Actor添加功能还是创建Component封装功能

最近在编写一个体感控制功能,根据运动控制器的方向来确定角色的移动方向.是否跳跃等.在开始使用UE4时,我会把功能放在Character类中,渐渐的Character类的功能越来越多,维护起来也变得复杂了.而且Character类在诸多文件中都要包含,每次改变Character类的声明,都需要重现编译很多文件,开发效率变低.当创建Component来封装体感控制功能时,代码变得内聚,Character类只需要挂接此Componnent,就可以提供功能.在开发此组件时,每次编译只要编译此Component即可,极大的加快了编译速度.所以使用Component来开发功能优势很明显.

2,使用BlueprintCallable,BlueprintImplementableEvent函数在蓝图中调试

为一个函数加上BlueprintCallable可以在蓝图中方便调用,而为一个函数加上BlueprintImplementableEvent,则可以在蓝图中实现,然后打印变量,或者绘制调试图形,调用DebugDrawLine系列函数.

3,添加UBlueprintFunctionLibrary函数

UBlueprintFunctionLibrary中的函数可以在蓝图中全局调用,把常用的功能写入它里面,可以提高开发效率.例如下面使用meta = (WorldContext = "WorldContextObject")标记可以在蓝图中把当前上下文对象传入

UCLASS()
class SHOOTERGAME_API UShooterBlueprintFunctionLibrary : public UBlueprintFunctionLibrary
{
  //获取其他的玩家
        UFUNCTION(BlueprintPure, meta = (WorldContext = "WorldContextObject"), Category = "Player")
    static AShooterCharacter*     GetOtherPlayer(UObject* WorldContextObject, AShooterCharacter* Player);
}

AShooterCharacter* UShooterBlueprintFunctionLibrary::GetOtherPlayer(UObject* WorldContextObject, AShooterCharacter* Player)
{
    if (UWorld* World = GEngine->GetWorldFromContextObject(WorldContextObject))
    {
        for (TActorIterator<AShooterCharacter> it(World); it; ++it)
        {
            if (*it != Player)
            {
                return *it;
            }
        }
    }

    return nullptr;

4,UPROPERTY属性标记

虚幻的垃圾回收依赖于UPROPERTY,不管是在struct,还是在class中,对于UObject及其子类类型的属性,都需标记UPROPERTY,以防止被垃圾回收.

5,Replicated属性

Replicated属性用于同步服务器的状态到客户端中,尤其对于中途加入的玩家,标记为Replicated的属性可以保持客户端与服务器端的状态一致

原文链接: https://www.cnblogs.com/sichuanke/p/7810816.html

欢迎关注

微信关注下方公众号,第一时间获取干货硬货;公众号内回复【pdf】免费获取数百本计算机经典书籍

原创文章受到原创版权保护。转载请注明出处:https://www.ccppcoding.com/archives/262944

非原创文章文中已经注明原地址,如有侵权,联系删除

关注公众号【高性能架构探索】,第一时间获取最新文章

转载文章受原作者版权保护。转载请注明原作者出处!

(0)
上一篇 2023年2月14日 下午3:30
下一篇 2023年2月14日 下午3:30

相关推荐