ALCCSectionPlane:3DGS 剖切面
剖切面 Actor,用一个平面切开 LCC 场景,保留平面的一侧。
| 模块 | LCC4UnrealRuntime |
| 头文件 | Tools/LCCSectionPlane.h |
| 父类 | AVolume |
| 面板显示名 | LCC Section Plane |
#include "Tools/LCCSectionPlane.h"
使用步骤、演示效果与属性面板说明见场景编辑 - 剖切平面。本页只列接口。
编辑器里会显示一个箭头指示组件,标明平面朝向,箭头指向的一侧就是 Upside。
Properties
| 属性 | 类型 | 说明 |
|---|---|---|
bEnabled | bool | 是否参与剖切 |
Mode | ESectionType | Upside 切掉平面上方,Downside 切掉平面下方 |
上下是相对平面自身朝向而言,不是世界坐标。旋转剖切面可以得到任意方向的剖切。取值含义见 ESectionType。
两个属性都没有 Setter,直接赋值即可。运行时改属性或改变换都会在下一帧自动生效,不需要手动通知渲染侧。
Methods
SetUpdateComponent / Refresh(已废弃)
UFUNCTION(BlueprintCallable, Category = "XGrids", meta = (DeprecatedFunction))
void SetUpdateComponent(ULCCComponentBase* Component);
UFUNCTION(BlueprintCallable, Category = "XGrids", meta = (DeprecatedFunction))
void Refresh();
两个方法都已废弃,实现为空操作,调用不会有任何效果也不会报错。
剖切数据现在每帧读取,属性与变换的改动下一帧自动反映到画面上。旧版本需要先 SetUpdateComponent 建立绑定、改完再调 Refresh() 的那套流程不再需要。
已有代码中的调用可以直接删除。蓝图里这两个节点会显示废弃警告,替换方式就是移除节点。
运行时创建
#include "Tools/LCCSectionPlane.h"
#include "LCCComponentBase.h"
ALCCSectionPlane* AMyTool::CreateSectionPlane(
ULCCComponentBase* Component, const FVector& Location, const FRotator& Rotation)
{
ALCCSectionPlane* Plane = GetWorld()->SpawnActor<ALCCSectionPlane>(
ALCCSectionPlane::StaticClass(), Location, Rotation);
if (!Plane)
{
return nullptr;
}
Plane->Mode = ESectionType::Upside; // 切掉平面上方
Plane->bEnabled = true;
Component->AddSectionPlane(Plane);
return Plane;
}
几种常见配置:
| 效果 | 位置与旋转 | Mode |
|---|---|---|
| 俯视看建筑内部 | 指定高度,FRotator::ZeroRotator | Upside |
| 竖直剖切看立面 | FRotator(0, 0, 90) 转成竖直平面 | Upside |
| 只保留中间一层 | 上下各放一个平面 | 下界 Downside,上界 Upside |
移动剖切面就能做出逐层揭开的动画,每帧直接改位置即可:
FVector Loc = SectionPlane->GetActorLocation();
Loc.Z = FMath::FInterpTo(Loc.Z, TargetHeight, DeltaTime, 1.0f);
SectionPlane->SetActorLocation(Loc);
改属性同样直接赋值:
SectionPlane->bEnabled = false;
蓝图节点见场景编辑 - 蓝图方法。
Notes
- 剖切只影响渲染,不影响碰撞。被切掉的部分仍可被射线打中、仍会挡住角色。
Upside与Downside相对平面自身朝向。旋转过之后要重新确认哪边是「上」,编辑器里看箭头最直观。- 构造时 Z 轴缩放被设为 0.01(薄片),编辑器里改缩放也会被压回该值。运行时改缩放不受这层约束,但一般不需要改。
- 同时生效的剖切面数量有上限,未授权时为 50 个,超出的不参与渲染并输出警告。剖切面与裁剪体共用这个配额。授权说明见版本与授权。
- 销毁剖切面只会触发一次渲染更新,不会从 Component 的
SectionPlanes数组里移除元素,数组中会残留失效指针(渲染时会自动跳过)。需要保持数组干净的话,销毁前先调RemoveSectionPlane。
See Also
- 场景编辑:完整使用说明
- ALCCClippingVolume:用有界体积裁剪
- ULCCComponentBase:
AddSectionPlane与RemoveSectionPlane