天天看點

UE4 碰撞【續】

一、碰撞輸出

在代碼中設定一個bool變量值,使其可以控制是否可以改變Actor,并且定義一個變量的方向向量FVector

//移動方向
	UPROPERTY(EditInstanceOnly,BlueprintReadWrite, Category = "MyVars")
	FVector floatDirection = FVector(0.0, 0.0, 0.0);

	//是否啟用方向移動
	UPROPERTY(EditInstanceOnly, BlueprintReadWrite, Category ="MyVars")
	bool bShouldUseDirection = false;
           

并且在Tick函數中,調用判斷是否發生碰撞,把碰撞的位置結果以日志的方式輸出來。

void ATestActor::Tick(float DeltaTime) {
	Super::Tick(DeltaTime);

	if (bShouldUseDirection) {
		FHitResult hitResult;
		AddActorLocalOffset(floatDirection, true, &hitResult);

		FVector hitLoction;
		hitLoction = hitResult.Location;
		UE_LOG(LogTemp, Warning, TEXT("X=%f,Y=%f,Z=%f"), hitLoction.X, hitLoction.Y, hitLoction.Z);
	}

}
           

函數AddActorLocalOffset(floatDirection, true, &hitResult);解析

第一個參數:floatDirection:表示移動的方向

第二個參數:true - 無論我們是否掃描到目标位置,觸發過程都會重疊,如果被什麼東西阻擋,則會在目标附近停止。僅掃描根零部件并檢查其是否發生阻塞碰撞,子零部件移動時不進行掃描。如果禁用碰撞,則不會産生任何效果。false-不會檢測碰撞

第三個參數:碰撞後的結果儲存到第三個參數中

UE4 碰撞【續】

二、如何“穿牆而過”?

在場景中選中“牆”,在細節面闆中【碰撞】-》【碰撞預設】-》【Custom】

UE4 碰撞【續】

可以看到世界類型為:WorldStatic

UE4 碰撞【續】

選中TestActor,檢視他的對象類型:WorldDynamic

UE4 碰撞【續】

下面有兩種方法實作“穿牆而過”;

第一種:勾選“牆”【碰撞預設】 -》【WorldDynamic】-》【忽略】,也就是讓“牆”忽略WorldDynamic對象

UE4 碰撞【續】

第二種:勾選TestActor->【WorldStatic】->【忽略】,也就是讓TestActor忽略WorldStatic類型的對象

UE4 碰撞【續】

aaa

繼續閱讀