码迷,mamicode.com
首页 > 编程语言 > 详细

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

时间:2017-11-09 19:35:33      阅读:291      评论:0      收藏:0      [点我收藏+]

标签:角色   编译   游戏   public   记录   ash   总结   图形   开发效率   

使用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 C++编程经验总结

标签:角色   编译   游戏   public   记录   ash   总结   图形   开发效率   

原文地址:http://www.cnblogs.com/sichuanke/p/7810816.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!