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只有另一個的碰撞體。