Solucionado (ver solução)
Solucionado
(ver solução)
1
resposta

Como que Unity faz para pegar componentes de malha pra fazer a troca de personagens?

Na aula vi que é possível "trocar" de personagem desativando todos os componentes de malha de um prefab e deixando apenas 1 ativo. Porém eu não entendi como que a Unity consegue escolher um componente aleatório utilizando essa linha do script.

//PlayerController script

transform.GetChild(RandomIndex).gameObject.SetActive(true);

Porque na minha cabeça o Transform é aquele componente de Posição, Rotação e Escala. Como que ele tem os dados de componente desse Prefab?

1 resposta
solução!

O Transform também guarda a hierarquia que você vê no painel de Hierarchy (Hierarquia) mas quando você faz um GetChild você recebe um Transform de volta por isso teve que pedir o GameObject daquele Transform.

A primeira vez é meio chocante mesmo mas o Transform é o componente mais importante do GameObject, ele guarda toda a hierarquia e interação de outros Transforms e não existe GameObject sem posição no espaço na Unity, por isso ele é ideal pra sempre guardar essa informação e ser obrigatório. Você pode fazer coisas como Transform.parent, Transform.IsChildOf(index), Transform.GetSiblingIndex, etc...

Nesse curso ainda não tivemos a necessidade dessa informação mas nos cursos dessa sequencia fazemos essa discussão e vamos utilizá-la para mudar o tipo dos zumbis dinamicamente, mas é legal que você já está pesquisando :)

Link da documentação:

https://docs.unity3d.com/ScriptReference/Transform.html