Attention: Here be dragons

This is the latest (unstable) version of this documentation, which may document features not available in or compatible with released stable versions of Godot.

CSGShape3D

Eredita: GeometryInstance3D < VisualInstance3D < Node3D < Node < Object

Ereditato da: CSGCombiner3D, CSGPrimitive3D

La classe di base CSG.

Descrizione

Questa è la classe base CSG che fornisce supporto delle operazioni CSG ai vari nodi CSG in Godot.

Prestazioni: I nodi CSG sono progettati solo alla prototipazione, poiché hanno un impatto significativo sulle prestazioni della CPU. Si consiglia di preparare i risultati finali delle operazioni CSG in una geometria statica che sostituisce i nodi CSG.

È possibile preparare i singoli risultati del nodo CSG radice in nodi con risorse statiche attraverso il menu dell'editor che appare quando un nodo CSG radice è selezionato.

È possibile anche preparare i singoli nodi CSG radice in risorse statiche tramite script, chiamando bake_static_mesh() per la mesh visiva o bake_collision_shape() per la collisione fisica.

È possibile preparare intere scene di nodi CSG in geometria statica ed esportarle con l'esportatore di scene gltf dell'editor: Scena > Esporta come... > Scena glTF 2.0...

Tutorial

Proprietà

bool

autosmooth

false

bool

calculate_tangents

true

int

collision_layer

1

int

collision_mask

1

float

collision_priority

1.0

Operation

operation

0

float

smoothing_angle

50.0

float

snap

bool

use_collision

false

Metodi

ConcavePolygonShape3D

bake_collision_shape()

ArrayMesh

bake_static_mesh()

bool

get_collision_layer_value(layer_number: int) const

bool

get_collision_mask_value(layer_number: int) const

Array

get_meshes() const

bool

is_root_shape() const

void

set_collision_layer_value(layer_number: int, value: bool)

void

set_collision_mask_value(layer_number: int, value: bool)


Enumerazioni

enum Operation: 🔗

Operation OPERATION_UNION = 0

La geometria di entrambe i primitivi è unita, mentre la geometria intersecante è rimossa.

Operation OPERATION_INTERSECTION = 1

Rimane solo la geometria intersecante, il resto viene rimosso.

Operation OPERATION_SUBTRACTION = 2

La seconda forma è sottratta dalla prima, lasciando un incavo nella sua forma.


Descrizioni delle proprietà

bool autosmooth = false 🔗

  • void set_autosmooth(value: bool)

  • bool is_autosmooth()

Enables automatic smoothing. This overrides any smoothing on the CSG node and instead uses smoothing_angle to calculate normals based on the angle between faces.

Children of a CSGCombiner3D node will be treated as a single mesh.


bool calculate_tangents = true 🔗

  • void set_calculate_tangents(value: bool)

  • bool is_calculating_tangents()

Calcola le tangenti per la forma CSG che consente l'uso di mappe normali. Questo è applicato solo alla forma radice, questa impostazione è ignorata su qualsiasi figlio. Impostando questo valore su false si può velocizzare leggermente la generazione delle forme.


int collision_layer = 1 🔗

  • void set_collision_layer(value: int)

  • int get_collision_layer()

Gli strati di fisica in cui si trova quest'area.

Gli oggetti collidibili possono esistere in uno qualsiasi dei 32 livelli diversi. Questi livelli funzionano come un sistema di marcatura e non sono visivi. Un collidibile può usare questi livelli per selezionare con quali oggetti esso può collidere, attraverso la proprietà collision_mask.

Un contatto viene rilevato se l'oggetto A è in uno qualsiasi degli strati scansionati dall'oggetto B, o se l'oggetto B è in uno qualsiasi degli strati scansionati dall'oggetto A. Consulta Strati e maschere di collisione nella documentazione per ulteriori informazioni.


int collision_mask = 1 🔗

  • void set_collision_mask(value: int)

  • int get_collision_mask()

Gli strati di fisica che questa forma CSG scansiona per le collisioni. Efficace solo se use_collision è true. Consulta Strati e maschere di collisione nella documentazione per ulteriori informazioni.


float collision_priority = 1.0 🔗

  • void set_collision_priority(value: float)

  • float get_collision_priority()

La priorità utilizzata per risolvere la collisione quando si verifica una penetrazione. Efficace solo se use_collision è true. Più alta è la priorità, minore sarà la penetrazione nell'oggetto. Questo può essere utilizzato, ad esempio, per impedire al giocatore di sfondare i confini di un livello.


Operation operation = 0 🔗

L'operazione che è eseguita su questa forma. Viene ignorata per il primo nodo figlio CSG poiché l'operazione avviene tra questo nodo e il figlio precedente del genitore di questo nodo.


float smoothing_angle = 50.0 🔗

  • void set_smoothing_angle(value: float)

  • float get_smoothing_angle()

When autosmooth is enabled, faces with an angle between them greater than this will be smoothed, while faces with a smaller angle will remain sharp.

Note: An angle lower than 0.1 will cause all smoothing to be disabled, this can be used to increase performance.


float snap 🔗

Deprecato: The CSG library no longer uses snapping.

Questa proprietà non fa nulla.


bool use_collision = false 🔗

  • void set_use_collision(value: bool)

  • bool is_using_collision()

Aggiunge una forma di collisione al motore fisico per la nostra forma CSG. Questa funzionerà sempre come un corpo statico. Nota che la forma di collisione è ancora attiva anche se la forma CSG stessa è nascosta. Vedi anche collision_mask e collision_priority.


Descrizioni dei metodi

ConcavePolygonShape3D bake_collision_shape() 🔗

Restituisce un ConcavePolygonShape3D preparato per la fisica del risultato dell'operazione CSG di questo nodo. Restituisce una forma vuota se il nodo non è un nodo radice CSG o non ha una geometria valida.

Prestazioni: Se l'operazione CSG produce una geometria molto dettagliata con molte facce, le prestazioni sulla fisica saranno molto lente. Le forme concave dovrebbero in generale essere utilizzate solo per la geometria statica di un livello e non con gli oggetti dinamici in movimento.

Nota: Gli aggiornamenti dei dati delle mesh CSG sono differiti, il che significa che si aggiornano con un ritardo di un frame renderizzato. Per evitare di ottenere una forma vuota o dati obsoleti di mesh, assicurarsi di chiamare await get_tree().process_frame prima di usare bake_collision_shape() in Node._ready() o dopo aver modificato le proprietà sul CSGShape3D.


ArrayMesh bake_static_mesh() 🔗

Restituisce un ArrayMesh statico preparato dal risultato dell'operazione CSG di questo nodo. I materiali dei nodi CSG coinvolti vengono inclusi come superfici aggiuntive alla mesh. Restituisce una mesh vuota se il nodo non è un nodo radice CSG o non ha una geometria valida.

Nota: Gli aggiornamenti dei dati delle mesh CSG sono differiti, il che significa che si aggiornano con un ritardo di un frame renderizzato. Per evitare di ottenere una forma vuota o dati obsoleti di mesh, assicurarsi di chiamare await get_tree().process_frame prima di usare bake_collision_shape() in Node._ready() o dopo aver modificato le proprietà sul CSGShape3D.


bool get_collision_layer_value(layer_number: int) const 🔗

Restituisce se lo strato specificato di collision_layer è abilitato o meno, fornito un numero di strato layer_number tra 1 e 32.


bool get_collision_mask_value(layer_number: int) const 🔗

Restituisce se lo strato specificato della collision_mask è abilitato, fornito un numero di strato layer_number tra 1 e 32.


Array get_meshes() const 🔗

Restituisce un Array con due elementi, il primo è il Transform3D di questo nodo e il secondo è la Mesh radice di questo nodo. Funziona solo quando questo nodo è la forma radice.

Nota: Gli aggiornamenti dei dati delle mesh CSG sono differiti, il che significa che si aggiornano con un ritardo di un frame renderizzato. Per evitare di ottenere una forma vuota o dati obsoleti di mesh, assicurarsi di chiamare await get_tree().process_frame prima di usare bake_collision_shape() in Node._ready() o dopo aver modificato le proprietà sul CSGShape3D.


bool is_root_shape() const 🔗

Restituisce true se questa è una forma radice ed è quindi l'oggetto che viene renderizzato.


void set_collision_layer_value(layer_number: int, value: bool) 🔗

In base a value, abilita o disabilita lo strato specificato nel collision_layer, fornito un layer_number compreso tra 1 e 32.


void set_collision_mask_value(layer_number: int, value: bool) 🔗

In base a value, abilita o disabilita lo strato specificato nel collision_mask, fornito un layer_number compreso tra 1 e 32.