Oi Gustavo, tudo bem?
Nesta mensagem vou explicar como fazer a definição do ID do objeto através de ícones na Interface e também restringir a criação dos objetos para acontecer somente quando clicar num ícone.
Segue o passo a passo:
1 - Crie um Blueprint do tipo Widget clicando com o botão direito numa área vazia do Content Browser e acessando o User Interface > Widget Blueprint, como mostra a primeira imagem em anexo.
2 - Esse Blueprint cria os itens da interface e tem bastante detalhes para estudar, mas basicamente você vai arrastando os itens do painel Palette para montar a interface na área central, chamada de Canvas, no painel Hierarchy os itens no Canvas são listados em hierarquia, pois é a hierarquia que faz um aparecer em cima do outro ou ser anexado ao outro, já no painel Details ficam as configurações de cada item, o primeiro é o alinhamento mostrado na segunda imagem em anexo.
A coisa mais importante do mundo é definir a escala da tela corretamente de acordo com o seu monitor para ver as coisas no tamanho certo, então, clique no Screen Size no parte superior direita do Canvas e escolha a opção que fará aparecer DPI Scale 1.0 no canto inferior direito, como mostra a imagem.
Para criar uma interface bem simples eu arrastei o item Horizontal Box para o Canvas e cliquei no alinhamento central superior, como mostra a imagem.
O Horizontal Box serve para receber outros itens e organizá-los horizontalmente, no meu exemplo troquei o nome dele para barra_icones.
O mais comum é criar os ícones automaticamente de forma procedural, mas aqui vamos criar manualmente, então, arrastei o item Button para cima do Horizontal Box (barra_icones), tanto faz se for no Canvas ou no Hierarchy, o importante é que ele fique dentro do Horizontal Box, fiz isso mais duas vezes para criar os 3 botões como mostra a imagem.
Depois arrastei o item Text para cima de cada Button para ele ficar dentro do Button, como mostra a imagem.
3 - Você pode configurar a posição do Horizontal Box (barra_icones) na tela usando os primeiros parâmetros disponíveis no painel Detail do lado direito da tela.
Selecionando o botão você também poderá ajustar o alinhamento e tamanho dele no painel Detail, como mostra a terceira imagem em anexo.
Clicando no Style abrirá as opções, incluindo o tamanho no Image Size como aparece na image, você ainda pode adicionar imagens e margens, note que o botão tem várias opções e precisa ajustar todas, pois uma é para quando passa o mouse em cima, outra é para quando clica, então, se não ajustar todas os ícones vão mudar de tamanho conforme passar o mouse sobre eles.
Selecionando o texto também poderá ajustar o tamanho, fonte, cor e tudo mais.
É bom colocar nome nos botões para poder identificá-los facilmente no gráfico.
4 - Agora, clique no botão grande escrito Graph na parte superior direita da tela para entrar no gráfico do Blueprint.
Clique com o botão direito no gráfico para abrir a lista de Nodes e digite Player para filtrar, pegue o Node Get Player Controller como mostra a quarta imagem em anexo.
Em seguida, arraste o Pin do Return Value dele para abrir a lista de Nodes neste contexto e digite o nome do Blueprint do seu Player Controller, escolha o Node Cast To Nome do Seu Player Controller, no meu exemplo o Player Controller se chama Teste_Player_Ctrl.
Conecte o Pin de execução do Event Construct que já estava no gráfico com o Cast To, como mostra a imagem.
Depois crie uma variável para guardar o Player Controller, ela precisa ser do mesmo tipo do seu Player Controller, como mostra a imagem.
Conecte essa variável no Cast To como mostra a imagem.
Fizemos isso para ter uma referência do Player Controller que contém o código para criar os objetos conforme o ID, pois vamos precisar acessar as variáveis dele.
5 - Agora, selecione a variável de um dos botões no painel da lateral esquerda, como mostra a quinta imagem em anexo, assim, aparecerá as configurações dela no painel Detail e entre elas está o menu Events, que contém as ações que o botão aceita.
Clicando no botão verde na frente do item On Clicked, vai aparecer no gráfico o Node On Clicked com o nome do botão entre parêntesis e o texto View em cima do botão verde ativado, como mostra a imagem.
Desta forma, quando o botão for clicado na interface vai rodar o código que estiver conectado neste Event On Clicked.
6 - Portanto, precisa fazer a mesma coisa para os outros botões criando o On Clicked selecionando cada botão e acessando o menu Events no painel Detail.
Em seguida, arraste para o gráfico a variável onde guardou o Player Controller com a opção Get, depois arraste o Pin dela para abrir a lista de Nodes e digite o nome da variável que criou para definir o ID do objeto no Blueprint do Player Controller.
A variável vai aparecer na lista em duas opções, com o Get para pegar informações e com o Set para inserir informações, então, precisamos usar a opção Set para alterar o valor da variável no Blueprint do Player Controller a partir deste Blueprint da interface.
Conecte o Pin de execução do Node On Clicked no Pin de execução da variável com o ID do objeto, como mostra a sexta imagem em anexo, e coloque o ID correto de cada objeto no valor da variável, lembrando que o Array inicia sempre com zero, então, usei zero no botão 1, 1 no botão 2 e 2 no botão 3, como aparece na imagem.
Compile, salve e feche o Blueprint.
7 - Abra o Blueprint do Player Controller, não vamos mais usar a definição do ID pelas teclas que fizemos anteriormente, então, pode deletar os Nodes com os números das teclas e as variáveis com o ID do objeto que estão conectadas neles.
Depois, clique com o botão direito no gráfico para abrir a lista de Nodes e digite Create para filtrar, selecione o Node Create Widget na lista.
Conecte o Pin de execução do lado esquerdo do Create Widget no Pin de execução do Node Show Mouse Cursor, que está conectado no Event Begin Play, como mostra a sétima imagem em anexo.
O Node Create Widget tem o item Class com uma listinha, clicando nela poderá escolher o Widget Blueprint que criamos com os ícones, digite o nome dele para encontrar rapidamente.
Agora é só arrastar o Pin do Return Value do Create Widget e escolher o nome Add To Viewport, como aparece na imagem.
Pronto, se você compilar, salvar e rodar a aplicação, os ícones estarão funcionando, porém, se clicar no piso vai criar o primeiro objeto do Array mesmo que não tenha clicado em nenhum ícone porque o código que fizemos no Event Left Mouse Button apenas verifica se houve o click e se acertou algum objeto, então, se clicar no ícone 2 para criar o segundo objeto do Array, o sistema vai mudar para o segundo objeto, mas vai criá-lo toda vez que clicar no piso e não é isso que queremos.
Para evitar este comportamento precisamos criar uma restrição que só deixe o Left Mouse Button funcionar quando tiver clicado num dos ícones, então, crie uma variável do tipo Boolean com o nome que quiser para definir quando o Left Mouse Button deve ser ativado, eu usei o nome Ativou, como aparece na sétima imagem em anexo.
Arraste a variável para o gráfico com a opção Get, depois arraste o Pin dela e escolha o Node Branch para saber quando ela é verdadeira ou falsa, como mostra a imagem.
Conecte o Pin de execução Pressed do Node Left Mouse Button no Pin de execução do lado esquerdo do Branch, depois conecte o Pin True do Branch no Pin de execução do lado esquerdo do outro Branch que temos no código, aquele que está ligado ao Hit Break Result, como mostra a imagem.
Desta forma o Left Mouse Button só vai funcionar quando a variável Ativou for verdadeira.
8 - Mas para funcionar direito temos que definir quando a variável é verdadeira e principalmente desativá-la depois de usada, caso contrário o Left Mouse Button continuará criando o objeto em todos os cliques depois que a variável se tornar verdadeira.
Portanto, para ela parar de funcionar depois que criar um objeto, é só arrastá-la para o gráfico com a opção Set e colocá-la no final de tudo, depois do Node Spawn Actor From Class, como mostra a oitava imagem em anexo.
O mais importante é deixar desativada a caixinha de seleção dela, para marcá-la como falsa quando terminar de executar o código de criação do objeto.
Compile, salve e feche o Blueprint.
9 - Agora abra o Widget Blueprint que criamos com os ícones, acesse o gráfico dele e arraste a variável que guardou o Player Controller com a opção Get, colocando-a na frente do código de um dos botões, depois arraste o Pin dela e digite o nome da variável que criou para ativar o Left Mouse Button, ela vai aparecer na lista com as duas opções, escolha a Set.
Conecte o Pin de execução da variável do ID do objeto no Pin de execução da variável que ativa o Left Mouse Button, depois faça o mesmo para os outros botões, como mostra a nona imagem em anexo.
O mais importante é marcar a caixinha de seleção da variável que ativa o Left Mouse Button para o código dele funcionar quando clicar no ícone.
Compile, salve e feche o Blueprint.
10 - Rode a aplicação, agora tudo deve estar funcionando a contento, você pode clicar onde quiser que nenhum objeto será criado, mas quando clicar num dos ícone e depois clicar no piso, o objeto definido no ícone será criado, porém, se clicar em seguida no piso não vai mais criar o objeto, para isso terá que selecionar o ícone novamente.
No meu teste eu tinha apenas alguns objetos de uma casinha, sendo o piso o primeiro do Array, o segundo o teto e o terceiro as vigas, então, veja na última imagem em anexo que os 3 foram criados de acordo com cada ícone.
Se tiver qualquer problema na execução desta última ou em qualquer outra questão do seu projeto, é só falar.
Abração e tudo de bom.
André Vieira