Unreal Engine 4 C++代码动态创建Constraint
来源:互联网 发布:软件行业薪酬调查报告 编辑:程序博客网 时间:2024/05/19 22:03
在最新的Unreal Engine 4.4版本中,Blueprint内的PhysicsConstraint是有bug的,Blueprint不能编辑Constraint的两个Actor组件,唯一的方法是通过C++代码来实现。还有很多这样的问题,好在源代码都给你了,想怎么改随自己。
我想在ThirdPerson这个模板里实现角色荡秋千的功能,就像波斯猴子里面这种。
首先,给Character Blueprint添加一个UPhysicsConstraintComponent:
UPROPERTY(VisibleDefaultsOnly, Category = "NanConstraint")
TSubobjectPtr<class UPhysicsConstraintComponent> ConstraintComp;
还需要一个固定的物理对象,当栓绳子的桩子,所以再添加一个USphereComponent:
UPROPERTY(VisibleDefaultsOnly, Category = "NanConstraint")
TSubobjectPtr<class USphereComponent> BlockSphere;
在Character的构造函数中初始化它们:
//创建Constraint Component
ConstraintComp = PCIP.CreateDefaultSubobject<UPhysicsConstraintComponent>(this, TEXT("ConstraintComp"));
FConstraintInstance ConstraintInst;
ConstraintComp->ConstraintInstance = ConstraintInst;
BlockSphere = PCIP.CreateDefaultSubobject<USphereComponent>(this, TEXT("BlockComponent"));
定义两个方法Swing()和UnSwing(),一个启动Constraint,一个断开Constraint
void ANanProjectCharacter::Swing()
{
FVector CharLocation = GetActorLocation();
FVector SphereLocation = CharLocation + FVector(0, 0, ConstraintLen);
CapsuleRot = CapsuleComponent->GetComponentRotation();
BlockSphere->SetWorldLocation(SphereLocation);
CapsuleComponent->SetSimulatePhysics(true);
ConstraintComp->SetWorldLocation(SphereLocation);
ConstraintComp->SetConstrainedComponents(BlockSphere, NAME_None, CapsuleComponent, NAME_None);
}
void ANanProjectCharacter::UnSwing()
{
CapsuleComponent->SetSimulatePhysics(false);
ConstraintComp->BreakConstraint();
CapsuleComponent->SetWorldRotation(CapsuleRot);
}
需要注意的是,Character的CapsuleComponent本身是不启用物理模拟的,为了让他摆起来,需要在启用Constraint之后,将他加入物理模拟。当然断开的时候,也别忘了再次禁用它。CapsuleRot保存启用物理模拟前,CapsuleComponent的旋转,如果不修正,角色断开Constraint之后很可能是头朝下的,很喜感。
- Unreal Engine 4 C++代码动态创建Constraint
- Unreal Engine 4 C++ 动态加载关卡
- Unreal Engine 4 动态切割模型实现
- Unreal Engine 4 发布
- Unreal Engine 4 Terminology
- Unreal Engine 4 C++ 动态加载UMG界面
- Unreal Engine 4 创建Destructible Mesh(可破坏网格)
- Unreal Engine 4 C++ 创建对象的几种方法
- Unreal Engine 4 C++ 创建对象的几种方法
- Unreal Engine 4 —— 工作流相关之代码管理
- 从Unreal Engine 3到Unreal Engine 4
- 从Unreal Engine 3到Unreal Engine 4
- Unreal Engine 4 编码规范
- Unreal Engine 4 字符串转换
- Unreal Engine 4:数据存储
- Unreal Engine 4 术语简介
- Unreal Engine 4 初始化流程
- Unreal Engine 4 字符串转换
- JqueryEasyUI 解决IE下加载时页面错乱的问题
- OpenCV4Android开发环境搭建两种方式加上图像二值化
- Python动态生成URL(__getattr__)
- mac下svn(versions)问题——“.a”(静态库)文件无法上传解决
- Ubuntu 下 C++ 编程起步
- Unreal Engine 4 C++代码动态创建Constraint
- Eclipse安装subclipse离线包及测试方法
- 经典面试题--字符串系列(二)--找出第一个出现一次的字符
- iphone数据存储之-- Core Data的使用(一)
- 黑马程序员_关于黑马java班入学测试技术分享<前5题>(一)
- NYOJ 448 寻找最大数
- Gray Code
- 设计模式归纳总结
- boost 之定时器的使用