2 Pluspunkte 0 Minuspunkte

Ich habe 2 Kameras, eine rendert alle Objekte auf Layer 1 und die andere rendert alle Objekte auf Layer 2. Wie kann ich den Layer von einem Object in der _ready Funktion ändern so das er für remote Player sichtbar ist aber nicht für mich selbst?

get_tree().root.get_node("Main/Boxes/Box1/MeshInstance3D").layers = 3

Wenn ich den Layer auf 3 setze dann scheint es zwar das der Cube anders gerendert wird weil er im Raum herum fliegt aber er sollte ja eigentlich garnicht sichtbar sein.

von  

2 Antworten

2 Pluspunkte 0 Minuspunkte

In Godot 4 gibt es zwei relevante Eigenschaften, um Layer zu filtern:

  • cull_mask: Bitmask die bestimmt, welche Layer von der Kamera gerendert werden. 
  • layers: Bitmask die bestimmt auf welchem Layer ein Objekt gerendert wird.

Eine Bitmask ist eine Zahl, bei der jedes Bit (einzelne Position in der Binärdarstellung) für eine spezifische Eigenschaft oder einen Zustand steht. In Bezug auf Layers bedeutet das, dass jedes Bit angibt, ob ein bestimmter Layer aktiv ist (1) oder nicht (0).

  • Layer 1 (Bit 0) aktiv: 0000 0000 0000 0000 0001 (dezimal: 1) 
  • Layer 2 (Bit 1) aktiv: 0000 0000 0000 0000 0010 (dezimal: 2) 
  • Layer 3 (Bit 2) aktiv: 0000 0000 0000 0000 0100 (dezimal: 4) 
  • Layer 4 (Bit 3) aktiv: 0000 0000 0000 0000 1000 (dezimal: 8)

Wenn du mehrere Layers aktivieren möchtest, kombinierst du sie mit einer bitweisen ODER (|) Operation.

mesh.layers = (1 << 0) | (1 << 3)

Um ein Layer zu deaktivieren, nutzt du eine bitweise UND Operation (&) mit der negierten Maske (~)

mesh_instance.layers &= ~(1 << 1)

von (884 Punkte)  
0 Pluspunkte 0 Minuspunkte
Wenn du den Layer auf 3 setzt werden Layer 1 und Layer 2 gerendert. Nicht Layer 3. Um Layer 3 zu rendern müsstest du den Layer auf 4 setzen.
von (566 Punkte)