首页 > 其他分享 >UE4 Dash功能实现

UE4 Dash功能实现

时间:2024-08-02 21:05:44浏览次数:15  
标签:功能 ECC 检测 Dash Capsule 时间轴 ECollisionChannel UE4

主要实现

主要是两点
一个是Dash的实现效果,一种是直接Dash到目的地,第二种则是在Dash过程中实现动画的播放显示
第二点则是障碍物的检测,对Dash的一个阻挡效果的实现

Dash实现效果

为了实现Dash过程中的动画显示,可以利用时间轴组件实现Location的移动,从而避免直接对角色的Location的瞬移。
首先对于时间轴在C++中的使用,主要就是利用时间轴组件然后利用委托实现时间轴曲线的数据传输
在UpdateLoc里面,通过时间轴曲线输出的值进行lerp在两个值之间的插值得到较为平滑的过渡

SetActorLocation(
		UKismetMathLibrary::VLerp(DashStartLocation, DashEndLocation, time),
		false,
		nullptr,
		ETeleportType::TeleportPhysics
	);

其次对于时间轴的播放速度应当和Montage播放速度差不多,可以设置一个变量DashDuration来控制变化速率,通过设置PlayRate为时间轴长度或者Montage播放时间 / DashDuration来控制播放时间和效果展示

障碍物检测

  1. 障碍物检测得到的是最终有效的EndLocation,原理就是利用CapsuleComponent的尺寸来对路径上存在多少个有效位置然后对每个位置进行碰撞检测。
    对于每个位置的检测一般是采用倒序,即从最远端可到达点直到起点。对于当前位置的检测采用UKismetSystemLibrary::CapsuleTraceMultiForObjects进行检测可以获得该位置上Capsule会发生碰撞的检测。
//可以检测的物体参数
TArray<TEnumAsByte<EObjectTypeQuery>> ObjectTypes;
ObjectTypes.Add(UEngineTypes::ConvertToObjectType(ECollisionChannel::ECC_WorldStatic));
ObjectTypes.Add(UEngineTypes::ConvertToObjectType(ECollisionChannel::ECC_WorldDynamic));
ObjectTypes.Add(UEngineTypes::ConvertToObjectType(ECollisionChannel::ECC_Pawn));
ObjectTypes.Add(UEngineTypes::ConvertToObjectType(ECollisionChannel::ECC_Vehicle));
ObjectTypes.Add(UEngineTypes::ConvertToObjectType(ECollisionChannel::ECC_Destructible));

//控制Capsule的位置
FVector CurrentCapsuleLoc = Start + CapsuleDiameter * (CapsuleCount - i) * Direction;

  1. 对于每一个Capsule检测结果再进一步进行碰撞通道的检测,这样可以排除哪些可以破坏的物品对人物的阻挡。
    首先就是对当前Capsule的位置是否是在地面之上,然后对于Capsule的检测结果分析检测Component的CollisionResponse
//检测是否在地面上
bool bIsFloor = UKismetSystemLibrary::LineTraceSingle(
		GetWorld(),
		Location,
		Location - FVector{0.0f, 0.0f, 500.0f},
		ETTQ,
		false,
		TArray<AActor*>{},
		EDrawDebugTrace::None,
		EndHitRes,
		true
	);
//判断Capsule的检测结果是否有发生阻碍的障碍物
for (auto& hit : HitRes)
{
  if (hit.Component->GetCollisionResponseToChannel(ECollisionChannel::ECC_Pawn) == ECollisionResponse::ECR_Block)
  {
    return false;
  }
}

Dash方向的控制

一般是通过判断LastInputVector是否是空值,如果为空那么就为调用ForwardVector

FVector DirVector = GetLastMovementInputVector() == FVector{0.0f, 0.0f, 0.0f} ? GetActorForwardVector() : GetLastMovementInputVector();

Dash次数和冷却

每次实现Dash之前先判断是否有有效的Dash次数以及是否正在Dash,而当此次Dash开始后可以调用Delay函数实现CoolDown
当一次时间轴动画播放完成后需要将正在Dash置为false,方便下一次调用

标签:功能,ECC,检测,Dash,Capsule,时间轴,ECollisionChannel,UE4
From: https://www.cnblogs.com/XTG111/p/18339547

相关文章

  • 如何开启idea中的断言功能?
    目录一、什么是断言?二、Java断言的语法三、开启断言一、什么是断言?断言(assert)是Java中的一条语句,一种在程序中的逻辑(如一个结果为真或假的逻辑判断式),目的是验证软件开发者预期的结果——当程序执行到断言的位置时,对应的断言应该为真。若断言不为真,则程序中止执行,并给出......
  • C++高级功能
    Lambda匿名函数[只读列表](参数列表){函数体}例如:sort(a+1,a+n,[](constData&x,constData&y){returnx.val<y.val;}constintk=5;autocalc=[k](constint&x){returnx*k;}template模板在struct/namespace/函数前加入template<typ......
  • 1.机器视觉的概念及其功能
    机器视觉是什么?机器视觉就是用机器代替人眼来做测量和判断。机器视觉系统的特点是提高生产的柔性和自动化程度。在一些不适合于人工作业的危险工作环境或人工视觉难以满足要求的场合,常用机器视觉来替代人工视觉;同时在大批量工业生产过程中,用人工视觉检查产品质量效率低且精......
  • (爆款)视频APP系统源码(功能强大,界面大气,比任何知识付费视频系统都要强)
    (爆款)视频APP系统源码:重塑视频娱乐新纪元在数字娱乐的浩瀚星空中,一款视频APP系统源码如同璀璨的新星,以其功能之强大、界面之大气,脱颖而出,成为市场瞩目的焦点。这款被誉为“爆款”的视频APP系统源码,不仅超越了传统视频平台的界限,更是在知识付费视频系统的基础上实现了质的飞跃,为......
  • PrismMVVM功能实现(通知、命令)
    常见的MVVM框架,基本围绕ICommand、INotifyPropertyChanged的封装实现绑定、通知等功能;而对于不同框架,在实现相同功能上,只是表现的形式有所不同,下图列举几种常见框架的功能区别:功能\框架PrismMVVMLightMicorsoft.Tookit.Mvvm通知BindableBaseViewModelBaseObservable......
  • 微服务集成springsecurity:功能授权与数据授权
    前言:最近怎么学习真没状态~~~~懒狗模式启动,听说好多在校考研的同学最近也学不下去了。哎呀,最近面了一下鲸浩科技的实习,到现在已经一天没回了,虽然我觉得面得还不错不过应该是挂了吧。功能授权:基于注解preAuthorize,实现RBAC模型提供的权限授权数据授权:这个就比较简单了,通俗的讲就......
  • 科大讯飞AI学习机P30 值得入手吗 功能介绍
    科大讯飞AI学习机P30是一款功能强大的学习设备,适用于小学到高中各个年龄段的学生。其拥有6GB内存和256GB存储空间,运行更加流畅,存储更加充裕,能够满足学生各种学习和娱乐需求。11英寸护眼平板设计有效减少了眼睛疲劳,保护了学生的视力健康。此外,P30还配备了丰富的英语学习资源和交互......
  • Applescrip成功实现FaceTime蓝号检测,检测是否开通FaceTime功能的实现原理
    FaceTime是苹果公司iOS和macOS(以前称MacOSX或OSX)内置的一款视频通话软件,通过Wi-Fi或者蜂窝数据接入互联网,在两个装有FaceTime的设备之间实现视频通话。其要求通话双方均具有装有FaceTime的苹果设备,苹果ID以及可接入互联网的3G/4G/5G或者Wi-Fi网络。一、Windows电脑上部署......
  • Linux安装微信(非wine版,非U麒麟版)功能全面(ubuntu,kali,debin)
    1、安装Flatpak 要在Ubuntu18.10(CosmicCuttlefish)或更高版本上安装Flatpak,只需运行: $sudoaptinstall flatpak 对于较旧的Ubuntu版本,建议使用官方FlatpakPPA来安装Flatpak。要安装它,请在终端中运行以下命令: $sudoadd-apt-repositoryppa:flatpak/stab......
  • 功能强大的电路设计与仿真软件Multisim 14.3安装教程
    一款功能强大的电路设计与仿真软件Multisim是一款强大的电子电路仿真软件,广泛应用于电子工程和教育领域。本教程全面细致地解析了原理图设计、电路仿真以及虚拟仪器测试等核心功能,通过友好易学的界面设计,为用户打造了一款高效便捷的电路设计和分析工具,助您轻松掌握电路设计的精髓......