第六章 unity3D、UE4、layaAir三引擎的碰撞用法與對比

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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章