一、碰撞輸出
在代碼中設定一個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-不會檢測碰撞
第三個參數:碰撞後的結果儲存到第三個參數中
![](https://img.laitimes.com/img/9ZDMuAjOiMmIsIjOiQnIsIyZuBnLkFWY1QGNlRGZkRTMjJ2MhJDMyQTZlVjYyQzN0cjMyQzLc52YucWbp5GZzNmLn9Gbi1yZtl2Lc9CX6MHc0RHaiojIsJye.png)
二、如何“穿牆而過”?
在場景中選中“牆”,在細節面闆中【碰撞】-》【碰撞預設】-》【Custom】
可以看到世界類型為:WorldStatic
選中TestActor,檢視他的對象類型:WorldDynamic
下面有兩種方法實作“穿牆而過”;
第一種:勾選“牆”【碰撞預設】 -》【WorldDynamic】-》【忽略】,也就是讓“牆”忽略WorldDynamic對象
第二種:勾選TestActor->【WorldStatic】->【忽略】,也就是讓TestActor忽略WorldStatic類型的對象
aaa