ALCCSectionPlane: piano di sezione del 3DGS
Actor del piano di sezione che taglia una scena LCC con un piano e ne mantiene un lato.
| Modulo | LCC4UnrealRuntime |
| Header | Tools/LCCSectionPlane.h |
| Classe padre | AVolume |
| Nome visualizzato nel pannello | LCC Section Plane |
#include "Tools/LCCSectionPlane.h"
Per i passi d'uso, una dimostrazione e la descrizione del pannello delle proprietà, vedere Modifica della scena - Piani di sezione. Questa pagina elenca solo le interfacce.
L'editor mostra un componente a freccia che indica l'orientamento del piano, e il lato verso cui punta la freccia è Upside.
Proprietà
| Proprietà | Tipo | Descrizione |
|---|---|---|
bEnabled | bool | Se partecipa al sezionamento |
Mode | ESectionType | Upside rimuove ciò che si trova sopra il piano, Downside rimuove ciò che si trova sotto |
Sopra e sotto sono relativi all'orientamento del piano stesso, non alle coordinate del mondo. Ruotando il piano di sezione si ottiene una sezione in qualsiasi direzione. Per il significato dei valori vedere ESectionType.
Nessuna delle due proprietà ha un Setter: si assegnano direttamente. Una modifica di una proprietà o del transform a runtime ha effetto dal frame successivo, senza bisogno di notificare manualmente il lato rendering.
Metodi
SetUpdateComponent / Refresh (deprecati)
UFUNCTION(BlueprintCallable, Category = "XGrids", meta = (DeprecatedFunction))
void SetUpdateComponent(ULCCComponentBase* Component);
UFUNCTION(BlueprintCallable, Category = "XGrids", meta = (DeprecatedFunction))
void Refresh();
Entrambi i metodi sono deprecati e implementati come operazioni vuote; chiamarli non ha effetto e non genera errori.
I dati di sezione vengono ora letti a ogni frame, quindi le modifiche di proprietà e transform si riflettono nell'immagine dal frame successivo. Il flusso precedente, che prevedeva di associare prima con SetUpdateComponent e chiamare Refresh() dopo ogni modifica, non serve più.
Le chiamate esistenti si possono semplicemente rimuovere. In Blueprint questi due nodi mostrano un avviso di deprecazione e la sostituzione consiste nell'eliminare il nodo.
Creazione a runtime
#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; // rimuove ciò che si trova sopra il piano
Plane->bEnabled = true;
Component->AddSectionPlane(Plane);
return Plane;
}
Alcune configurazioni comuni:
| Effetto | Posizione e rotazione | Mode |
|---|---|---|
| Vista dall'alto dell'interno di un edificio | Un'altezza determinata, FRotator::ZeroRotator | Upside |
| Sezione verticale per osservare una facciata | FRotator(0, 0, 90) per rendere il piano verticale | Upside |
| Mantenere solo lo strato intermedio | Un piano sopra e uno sotto | Downside per il limite inferiore, Upside per quello superiore |
Spostare il piano di sezione produce un'animazione di rivelazione strato per strato: basta cambiare la posizione a ogni frame.
FVector Loc = SectionPlane->GetActorLocation();
Loc.Z = FMath::FInterpTo(Loc.Z, TargetHeight, DeltaTime, 1.0f);
SectionPlane->SetActorLocation(Loc);
Anche le modifiche delle proprietà sono altrettanto dirette:
SectionPlane->bEnabled = false;
Per i nodi Blueprint vedere Modifica della scena - Metodi Blueprint.
Note
- Il sezionamento influisce solo sul rendering, non sulle collisioni. Una parte rimossa dal sezionamento può ancora essere colpita da un raggio e continua a bloccare un personaggio.
UpsideeDownsidesono relativi all'orientamento del piano stesso. Dopo una rotazione, verificare di nuovo quale lato sia «sopra»; guardare la freccia nell'editor è il modo più diretto.- La scala Z è impostata a 0.01 alla costruzione (una fetta sottile) e modificare la scala nell'editor la riporta a quel valore. Una modifica della scala a runtime non è soggetta a questo vincolo, ma di norma non serve.
- Il numero di piani di sezione attivi contemporaneamente è limitato, a 50 senza licenza; quelli in eccesso non partecipano al rendering e viene registrato un avviso. Piani di sezione e volumi di taglio condividono questa quota. Per le licenze vedere Edizioni e licenze.
- Distruggere un piano di sezione innesca solo un aggiornamento del rendering e non rimuove l'elemento dall'array
SectionPlanesdel Component, lasciando un puntatore obsoleto nell'array (ignorato automaticamente durante il rendering). Per mantenere l'array pulito, chiamareRemoveSectionPlaneprima della distruzione.
Vedere anche
- Modifica della scena: descrizione d'uso completa
- ALCCClippingVolume: taglio con un volume delimitato
- ULCCComponentBase:
AddSectionPlaneeRemoveSectionPlane