1.碰撞与触发条件
(1)unity
碰撞:两个GameObject都有碰撞器且isTrigger为false,且其中之一有刚体。
触发:两个GameObject都有碰撞器且其中之一isTrigger为true,且其中之一有刚体。
如下设置与不同的层碰撞以及忽略:
unity2018版本路径为 Edit->Project Setting->Physics:
(2)layaAir
生成Laya.Sprite3D 添加刚体组件(碰撞器集成在刚体里面)
触发则只需要将其中之一的"isTrigger"设置为true;
(3)Unreal Engine
在新生成的pawn类上面添加碰撞组件,然后设置Collision的参数。其中触发在ue4里为重叠。
如图所示设置与各个不同的通道设置:
其中 碰撞预设值 可以改为 NoCollision 则没有碰撞效果。
2.碰撞事件以及触发事件
1.unity(C#)
2.layaAir(typescript)
3.Unreal Engine(C++)
ue4的碰撞事件只要进,重叠(触发)只有一进一出。需要自己注册事件。
//.h的头文件中声明碰撞事件
UFUNCTION()
void OnCollision(UPrimitiveComponent* HitComponent, AActor* OtherActor, UPrimitiveComponent* OtherComponent, FVector NormalImpulse, const FHitResult& Hit);
//.cpp文件中 构造函数或者开始函数中获取碰撞组件,然后在碰撞组件上注册碰撞事件OnComponentHit
//其中进入重叠(触发)为OnComponentBeginOverlap,退出重叠(触发)为OnComponentEndOverlap
auto *Box = FindComponentByClass<UCapsuleComponent>();
if (Box)
{
FScriptDelegate DelegateHit;
DelegateHit.BindUFunction(this, "OnCollision");
Box->OnComponentHit.Add(DelegateHit);
}
//.cpp 文件 实现碰撞事件
void ARTSCharacter::OnCollision(UPrimitiveComponent* HitComponent, AActor* OtherActor, UPrimitiveComponent* OtherComponent, FVector NormalImpulse, const FHitResult& Hit)
{
}
3.对比
大体来说,layaAir与unity差不多,而ue4的碰撞事件缺少离开碰撞的事件。而ue4的碰撞事件获取的参数较多,而layaAir与unity只有另一个的碰撞体。