Estou desenvolvendo um jogo e, consegui desabilitar o objeto detentor do componente cinemachineVirtualCamera clicando em um botão de jogo de celular nomeado f, de foco e, não estou conseguindo habilitar novamente com o botão nomeado de w, w de warrior, usando event trigger e o script
nessa sessao respondemos a dúvidas pontuais.
O seu script tá com alguns problemas:
1. Uso incorreto do "GetComponent<GameObject>(). O método GetComponent não é necessário para referenciar um objeto do tipo GameObject. Você deveria arrastar o objeto cinemachine diretamente no editor do Unity.
2. Lógica de Controle para habilitar/desabilitar o objeto. O script não parece lidar corretamente com o botão de foco (F) para desativar a câmera e o botão de guerreiro (W) para reativá-la.
3. Uso desnecessário da variável "definir". A lógica de ativação pode ser simplificada sem ela.
4. Falta de conxeão do botão ao método. Certifique-se de que os botões estão configurados no Unity para chamar o método apertar_botao.
Segue abaixo a solução corrigida e simplificada:
using UnityEngine;
public class WarriorFunction : MonoBehaviour
{
public GameObject cinemachine; // Arraste o objeto no Editor do Unity
private int apertadoBotao;
void Update()
{
if (apertadoBotao == 1) // Botão "f" (desativar)
{
cinemachine.SetActive(false);
}
else if (apertadoBotao == 2) // Botão "w" (ativar)
{
cinemachine.SetActive(true);
}
}
public void ApertarBotao(int pressionado)
{
apertadoBotao = pressionado;
}
}
Após escrever o script, configure o unity para funcionar.
1. Atribuir o objeto cinemachine: arraste o objeto com o componente CinemachineVirtualCamera para o campo cinemachine no Inspector.
2. Configure os botões:
2.1. Adicione um componente Event Trigger nos botões.
2.2. Crie um evento do tipo PointerClick no botão F e no botão W.
2.3. Arraste o GameObject que contém o script para o campo do evento.
2.4. No menu suspenso, selecione o método WarriorFunciton.ApertarBotao(int).
2.5. Para o botão F, insira o valor 1. E para o botão W, insira o valor 2.
Caso os botões F e W, você esteja se referindo as respectivas teclas do teclado, é só usar a classe Input no método Update. Ficaria assim:
using UnityEngine;
public class WarriorFunction : MonoBehaviour
{
public GameObject cinemachine; // Arraste o objeto no Editor do Unity
void Update()
{
// Detecta se a tecla "F" foi pressionada
if (Input.GetKeyDown(KeyCode.F))
{
cinemachine.SetActive(false); // Desativa o objeto
}
// Detecta se a tecla "W" foi pressionada
if (Input.GetKeyDown(KeyCode.W))
{
cinemachine.SetActive(true); // Ativa o objeto
}
}
}