第六章 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只有另一个的碰撞体。

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