【UE4C++-ActionRougelike-05】调试工具


【UE4C++-ActionRougelike-05】调试工具

1、调试信息

1.1 日志信息

UE_LOG(CategoryName, Verbosity, Format)
/*
函数参数:
CategoryName:日志种类名,可以为不同模块日志可以添加不同的类别名
Verbosity:日志级别(Log,Warning,Error)
Format:日志内容,TEXT()用于将字符串转为UE所需格式
*/  

在油桶碰撞中添加日志信息

void ASExplosionBarrel::OnActorHit(UPrimitiveComponent* HitComponent, AActor* OtherActor, UPrimitiveComponent* OtherComp, FVector NormalImpulse, const FHitResult& Hit)
{
    //日志种类为临时日志,级别为Log,输出内容
	UE_LOG(LogTemp, Log, TEXT("OnActorHit in Explosive Barrel"));
    //日志种类为临时日志,级别为Warning,输出碰撞的Actor名,以及游戏内的时间
    UE_LOG(LogTemp, Warning, TEXT("OtherActor: %s, at game time:%f"), *GetNameSafe(OtherActor), GetWorld()->TimeSeconds);
    //调试绘制字符串,在游戏中碰撞的位置输出CombinedString字符串。头文件:DrawDebugHelpers.h
    DrawDebugString(GetWorld(), Hit.ImpactPoint, CombinedString, nullptr, FColor::Green, 2.0f, true);

	//ForceComp释放作用力
	ForceComp->FireImpulse();
}

效果如下:

输出调试信息

2、断点调试

3、断言

类似于if判断会验证一个表达式的真假,一旦断言检查到不符合预期,程序会直接中断甚至抛出异常,利于开发者定位问题;且断言只在debug阶段有效,对于打包好的程序是不会生效的。ensure就是UE中的断言函数。此外还有check,但两者不同之处在于ensure提示错误但不会中断程序,check会直接结束你的关卡测试,所以通常使用ensure。(参考文章:作者:surkea https://www.bilibili.com/read/cv19004443 出处:bilibili)

if (ensure(ProjectileClass)) {
    // 获取模型右手位置
    FVector RightHandLoc = GetMesh()->GetSocketLocation("Muzzle_01");
    // 朝向角色方向,在角色的右手位置生成
    FTransform SpawnTM = FTransform(GetActorRotation(), RightHandLoc);
    // 此处设置碰撞检测规则为:即使碰撞也总是生成
    FActorSpawnParameters SpawnParams;
    SpawnParams.SpawnCollisionHandlingOverride = ESpawnActorCollisionHandlingMethod::AlwaysSpawn;
    SpawnParams.Instigator = this;
    GetWorld()->SpawnActor<AActor>(ProjectileClass, SpawnTM, SpawnParams);
} 

文章作者: Woilin
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 Woilin !
评论
  目录