目录
代码速查
根据世界方向/局部方向移动
根据世界方向/局部方向旋转
加力加扭矩
1碰撞并报告碰撞位置
两个设为阻挡才会阻挡,其中一个是重叠就会重叠
2例子:旋转前进!/原地踏步?
3增加力和扭矩
1.头文件
2.cpp文件
3.放模型
4.模拟物理
代码速查
根据世界方向/局部方向移动
AddActorWorldOffset(Initial_Direction, true, &HitResult);//FVector|是否开启扫描|扫描结果
AddActorLocalOffset(Initial_Direction, true, &HitResult);
根据世界方向/局部方向旋转
AddActorWorldRotation
AddActorLocalRotation
加力加扭矩
StaticMesh->AddForce(InitialForce);
StaticMesh->AddTorque(InitialTorque);
输出碰撞坐标
UE_LOG(LogTemp, Warning, TEXT("@@f Hit@:x=%f,y=%f,z=%f"),HitResult.Location.X, HitResult.Location.Y, HitResult.Location.Z);
UE_LOG(LogTemp, Warning, TEXT("@@s Hit@:x=%s,y=%s,z=%s"),*FString::SanitizeFloat(HitResult.Location.X), *FString::SanitizeFloat(HitResult.Location.Y),* FString::SanitizeFloat(HitResult.Location.Z));
碰撞并报告碰撞位置
以下
%f写法数值更详细
FHitResult HitResult;//声明变量
AddActorLocalOffset(Initial_Direction, true, &HitResult);//添加对象移动/移动式是否开启扫描/扫描(碰撞)结果
if (HitResult.bBlockingHit) {
UE_LOG(LogTemp, Warning, TEXT("@@f Hit@:x=%f,y=%f,z=%f"),HitResult.Location.X, HitResult.Location.Y, HitResult.Location.Z);
}
if (HitResult.bBlockingHit) {
UE_LOG(LogTemp, Warning, TEXT("@@s Hit@:x=%s,y=%s,z=%s"),*FString::SanitizeFloat(HitResult.Location.X), *FString::SanitizeFloat(HitResult.Location.Y),* FString::SanitizeFloat(HitResult.Location.Z));
}
结果
两个设为阻挡才会阻挡,其中一个是重叠就会重叠
例子:旋转前进!/原地踏步?
使用世界坐标-前进+旋转操作,对象将会旋转前进;
但是,
使用对象坐标-前进+旋转操作,对象将头旋转着朝尾巴前进,原地踏步。
增加力和扭矩
力是直线方向的力,扭矩是绕某几个轴旋转所施加的力。
1.头文件
公有
/// <summary>
/// 力和扭矩
/// </summary>
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "MyValues")
FVector InitialForce;//力
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "MyValues")
FVector InitialTorque;//扭矩
2.cpp文件
头文件
#include "Components/StaticMeshComponent.h"
构造函数初始化
InitialForce = FVector(0);
InitialTorque = FVector(0);
BeginPlay
StaticMesh->AddForce(InitialForce);
StaticMesh->AddTorque(InitialTorque);
3.放模型
不放模型用不了模拟物理
4.模拟物理