CCCPaste

Como garantir que um objeto não compartilhe o...

Como garantir que um objeto não compartilhe o mesmo shader com outras instancias na mesma cena.Fazendo com que um objeto tenha o seu próprio material exclusivo.


1- Posso fazer via código usando esse comando na função ready para um exemplo de shader em um TextureRect.

func _ready():
$TextureRect.material = $TextureRect.material.duplicate()

Na Godot, materiais (e outros Resources) são compartilhados por padrão.
Ou seja, se você altera um parâmetro (shader_parameter, por exemplo) em um ShaderMaterial que está sendo usado por vários nós, todos os nós são afetados.

Com esse código, você “quebra” esse compartilhamento: cada instância do TextureRect passa a ter seu próprio material, permitindo alterar parâmetros só nele, sem mexer nos outros.

2- Uma forma mais simples sem precisar digitar essa linha de código é no inspector do objeto onde esta o shader seleciona a opção :Make Unique