先在项目设置的Physics中设置
在内容浏览器增加物理材质
在里面进行定义
进入人物的physics中将自己创的定义进去
这样角色就拥有了物理材质,接下来进入程序
加上互动。呈现点效果
进入项目.h文件中增加宏定义,=//就是给这两个物理材质增加个假名,等下容易进行调用
#define SURFACE_FLESHDEFAULT SurfaceType1
#define SURFACE_FLESHVULNERABLE SurfaceType2
再回到自己想互动的actor。h中
UPROPERTY(EditDefaultsOnly, BlueprintReadOnly, Category = "weapon")
class UParticleSystem*FleshImpactEffect;
UPROPERTY(EditDefaultsOnly, BlueprintReadOnly, Category = "weapon")
class UParticleSystem*TraceEffect;
再去。cpp中
#include "Particles/ParticleSystem.h"
#include "项目.h"
#include "PhysicalMaterials/PhysicalMaterial.h"
在互动的地方写下
EPhysicalSurface SurfaceType = UPhysicalMaterial::DetermineSurfaceType(Hit.PhysMaterial.Get());//定义SurefaceType
FHitResult Hit;//碰撞的位置
UParticleSystem*SelectedEffect = nullptr;//先自己定义一个空的粒子,方便选择
switch (SurfaceType)//相当于蓝图中的切换开关
{
case SURFACE_FLESHDEFAULT://宏定义代表刚刚定义的SurfaceType1
case SURFACE_FLESHVULNERABLE://宏定义代表刚刚定义的SurfaceType2
break;//循环中断
SelectedEffect = FleshImpactEffect;
default://当没有碰触到那两个粒子的话就选择默认粒子
SelectedEffect = DefaultImpactEffect;
break;
}
if (SelectedEffect)//如果选择粒子为真触发
{
UGameplayStatics::SpawnEmitterAtLocation(GetWorld(), SelectedEffect, Hit.ImpactPoint, Hit.ImpactNormal.Rotation());
}