diff --git a/03-UnrealEngine/Rendering/RenderFeature/ShaderWorldPlugin/ShaderWorld.md b/03-UnrealEngine/Rendering/RenderFeature/ShaderWorldPlugin/ShaderWorld.md index dc1ce95..8e2858b 100644 --- a/03-UnrealEngine/Rendering/RenderFeature/ShaderWorldPlugin/ShaderWorld.md +++ b/03-UnrealEngine/Rendering/RenderFeature/ShaderWorldPlugin/ShaderWorld.md @@ -652,9 +652,6 @@ bool AShaderWorldActor::CollisionPreprocessGPU() return true; } ``` - - - #### CollisionGPU() ```c++ @@ -1481,7 +1478,7 @@ void AShaderWorldActor::UpdateCollisionMeshData(FCollisionMeshElement& Mesh) } ``` -### CollisionCPU +#### CollisionCPU ```c++ void AShaderWorldActor::CollisionCPU() @@ -1512,22 +1509,24 @@ void AShaderWorldActor::CollisionCPU() } - + //通过AShaderWorldActor::UpdateCollisionInRegion()来添加碰撞重建区域 bool bExternalCollisionRebuildRequest = !CollisionUpdateRequest.IsEmpty(); FBox2D BPCollisionRebuildRequest(ForceInit); - + //从CollisionUpdateRequest队列中取出碰撞更新范围 if (bExternalCollisionRebuildRequest) CollisionUpdateRequest.Dequeue(BPCollisionRebuildRequest); TArray VisitorLocations; // Use latest camera we know if current array is empty - + //在BeginPlay()会将ShaderWorld Actor的Location添加到CameraLocations中。 + //在UpdateCameraLocation()中会将,这个函数会在Setup()中调用。 + // USWorldSubsystem::Tick()中会调用UpdateVisitors()获取所有USW_CollisionComponent。 if (CameraLocations.Num() <= 0) VisitorLocations.Add(CamLocation); VisitorLocations.Append(CameraLocations); - + //将bPreprocessingCollisionUpdate线程安全变量设置为true (*bPreprocessingCollisionUpdate.Get()) = true; Async(EAsyncExecution::TaskGraph, [Completion = bPreprocessingCollisionUpdate, CollData = CollisionShareable, @@ -1547,7 +1546,6 @@ void AShaderWorldActor::CollisionCPU() double CollisionWidth = CollData->CollisionResolution * (CollData->VerticePerPatch - 1); TMap BrushRedraws; - for (const FBox2d& B : BrushScope) { const int32 MinBoxX_local = FMath::FloorToInt(((double)(B.Min.X + LocalOriginLocation.X)) / CollisionWidth + 0.45);