ALCCClippingVolume:3DGS 裁剪体
裁剪体 Actor,用盒形或球形体积裁掉 LCC 场景的一部分。
| 模块 | LCC4UnrealRuntime |
| 头文件 | Tools/LCCClippingVolume.h |
| 父类 | AVolume |
| 面板显示名 | LCC Clipping Volume |
#include "Tools/LCCClippingVolume.h"
使用步骤、演示效果与属性面板说明见场景编辑 - 裁剪框。本页只列接口。
Properties
| 属性 | 类型 | 说明 |
|---|---|---|
bEnabled | bool | 是否参与裁剪 |
Mode | EClipType | Inside 裁掉体积内部,Outside 裁掉体积外部 |
VolumeType | EClipVolumeType | Box 盒形,Sphere 球形 |
取值含义见 EClipType 与 EClipVolumeType。
三个属性都没有 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/LCCClippingVolume.h"
#include "LCCComponentBase.h"
ALCCClippingVolume* AMyTool::CreateBoxClip(
ULCCComponentBase* Component, const FVector& Location, const FVector& Extent)
{
ALCCClippingVolume* Volume = GetWorld()->SpawnActor<ALCCClippingVolume>(
ALCCClippingVolume::StaticClass(), Location, FRotator::ZeroRotator);
if (!Volume)
{
return nullptr;
}
Volume->VolumeType = EClipVolumeType::Box;
Volume->Mode = EClipType::Inside;
Volume->bEnabled = true;
// AVolume 的尺寸通过缩放控制
Volume->SetActorScale3D(Extent / 100.0f);
Component->AddClippingVolume(Volume);
return Volume;
}
临时开关裁剪效果不要增删数组,直接改 bEnabled 更轻量:
for (ALCCClippingVolume* Volume : MyVolumes)
{
if (Volume)
{
Volume->bEnabled = bEnable;
}
}
运行时移动裁剪体做动画,直接改变换即可:
// 让裁剪体扫过场景
FVector Loc = ClipVolume->GetActorLocation();
Loc.X += 200.0f * DeltaTime;
ClipVolume->SetActorLocation(Loc);
蓝图节点见场景编辑 - 蓝图方法。
Notes
- 裁剪只影响渲染,不影响碰撞。裁掉的区域仍可被射线打中、仍会挡住角色。
- 多个裁剪体同时作用时各自独立判定,效果叠加。既有
Inside又有Outside时容易出现意外结果。 - 同时生效的裁剪体数量有上限,未授权时为 50 个,超出的不参与渲染并输出警告。裁剪体与剖切面共用这个配额。授权说明见版本与授权。
- 销毁裁剪体只会触发一次渲染更新,不会从 Component 的
ClippingVolumes数组里移除元素,数组中会残留失效指针(渲染时会自动跳过)。需要保持数组干净的话,销毁前先调RemoveClippingVolume。
See Also
- 场景编辑:完整使用说明
- ALCCSectionPlane:用平面剖切
- ULCCComponentBase:
AddClippingVolume与RemoveClippingVolume