[RESOLVIDO] Dúvida com o Novo Input System
3 participantes
SchultzGames :: UNITY 3D :: Resolvidos
Página 1 de 1
[RESOLVIDO] Dúvida com o Novo Input System
Olá pessoal, tudo bom?
Tenho no meu jogo atualmente, um Script no meu Carro/Player, filho deste GameObject tenho uma Arma.
No Carro, tenho um Script chamado InputManager em que a função dele é receber todos as informações do Input System (dos controles/ teclados, etc) e passa para outros Scripts. Então ainda no Objeto - Carro - tenho um Script Controller, neste recebo o Horizontal e Vertical do Script InputManager e o carro se move perfeitamente.
Na arma, estou tendo um problema. Nela tenho um Script Chamado ProjectileGun onde Instancio Munição, Son do Tiro, Luz e efeitos da arma. Neste Stript recebe um Tiro = true do Input System e com isso, a arma atira.
Carro (Script InputManager, Controller)
Arma (Script ProjetileGun)
(Espero não ter ficar confuso até aqui)
-----------------------------------------------------------------
Antes de usar o Input System eu tinha o seguinte comando no Script ProjectileGun
Este código servia para eu controlar se queria dar rajada ou não. E funcionava muito bem.
Depois que mudei para o Input System, não consigo fazer mais nada parecido com isso.
Como faço para que ao clicar uma Variável específica retorne True ou False?
Não consigo encontrar a resposta na documentação, e só encontrei algo sobre wasPressedThisFrame mas não sei como usar está opção.
Tenho no meu jogo atualmente, um Script no meu Carro/Player, filho deste GameObject tenho uma Arma.
No Carro, tenho um Script chamado InputManager em que a função dele é receber todos as informações do Input System (dos controles/ teclados, etc) e passa para outros Scripts. Então ainda no Objeto - Carro - tenho um Script Controller, neste recebo o Horizontal e Vertical do Script InputManager e o carro se move perfeitamente.
Na arma, estou tendo um problema. Nela tenho um Script Chamado ProjectileGun onde Instancio Munição, Son do Tiro, Luz e efeitos da arma. Neste Stript recebe um Tiro = true do Input System e com isso, a arma atira.
Carro (Script InputManager, Controller)
Arma (Script ProjetileGun)
(Espero não ter ficar confuso até aqui)
-----------------------------------------------------------------
Antes de usar o Input System eu tinha o seguinte comando no Script ProjectileGun
- Código:
[size=15]if(permitirSegurarBotaoRajada) tiro = Input.GetButton("FireButton");[/size]
[size=15]else tiro = Input.GetButtonDown("FireButton");[/size]
Este código servia para eu controlar se queria dar rajada ou não. E funcionava muito bem.
Depois que mudei para o Input System, não consigo fazer mais nada parecido com isso.
Como faço para que ao clicar uma Variável específica retorne True ou False?
Não consigo encontrar a resposta na documentação, e só encontrei algo sobre wasPressedThisFrame mas não sei como usar está opção.
- Código:
public void Atirar(InputAction.CallbackContext context)
{
if (!hasAuthority)
return;
Debug.Log("Shoot!");
tiroApertado = true;
}
RenatoBarreto- Iniciante
- PONTOS : 1390
REPUTAÇÃO : 5
Idade : 33
Respeito as regras :
Re: [RESOLVIDO] Dúvida com o Novo Input System
Você pode implementar IPointerClickHandler interface para o seu script de objeto, algo assim:
Vê se Isso Pode Te Dar Uma Ajuda ou Uma Ideia.
- Código:
public class Exemplo: MonoBehaviour , IPointerClickHandler
{
public bool Clicou, Rajada;
[Range(0, 10)] public float timeTemporario = 3;
// DETECTA SE OCORRE UM CLIQUE
public void OnPointerClick ( PointerEventData pointerEventData)
{
Clicou = true;
timeTemporario = 3;
}
public void OnPointerDown ( PointerEventData pointerEventData)
{
// DETECTA QUE O BOTAO DO MOUSE AINDA ESTA SENDO PRESSIONADO.
if (timeTemporario > 0)
timeTemporario -= Time.deltaTime;
if (timeTemporario <= 0)
Rajada = true;
}
public void OnPointerUp ( PointerEventData pointerEventData)
{
// DETECTA SE OS CLIQUES NÃO ESTÃO MAIS SENDO REGISTRADOS.
Clicou = false;
Rajada = false;
}
}
Vê se Isso Pode Te Dar Uma Ajuda ou Uma Ideia.
Magnatah- Instrutor
- PONTOS : 3548
REPUTAÇÃO : 209
Idade : 24
Áreas de atuação : Dєรєиvσlvєdσя Wєb(Fяσит-єиd), Blєиdєя, υиiтy, C#, ρнρ є Jαvαรcяiρт.
Respeito as regras :
Re: [RESOLVIDO] Dúvida com o Novo Input System
Magnatah escreveu:Você pode implementar IPointerClickHandler interface para o seu script de objeto, algo assim:
- Código:
public class Exemplo: MonoBehaviour , IPointerClickHandler
{
public bool Clicou, Rajada;
[Range(0, 10)] public float timeTemporario = 3;
// DETECTA SE OCORRE UM CLIQUE
public void OnPointerClick ( PointerEventData pointerEventData)
{
Clicou = true;
timeTemporario = 3;
}
public void OnPointerDown ( PointerEventData pointerEventData)
{
// DETECTA QUE O BOTAO DO MOUSE AINDA ESTA SENDO PRESSIONADO.
if (timeTemporario > 0)
timeTemporario -= Time.deltaTime;
if (timeTemporario <= 0)
Rajada = true;
}
public void OnPointerUp ( PointerEventData pointerEventData)
{
// DETECTA SE OS CLIQUES NÃO ESTÃO MAIS SENDO REGISTRADOS.
Clicou = false;
Rajada = false;
}
}
Vê se Isso Pode Te Dar Uma Ajuda ou Uma Ideia.
Muito obrigado pela resposta, só não entendi uma questão.
Este método funciona com o Input System? Porque no caso, a minha Action está nomeada como Atirar, então dentro do meu método eu consigo fazer referência a IPointerClickHandler ou está é uma outra forma de fazer isto?
[list=linenums]
[*]public void Atirar(InputAction.CallbackContext context){
[*]}
[/list]
RenatoBarreto- Iniciante
- PONTOS : 1390
REPUTAÇÃO : 5
Idade : 33
Respeito as regras :
Re: [RESOLVIDO] Dúvida com o Novo Input System
Não sei se vc sabe o basico do novo input, mas vou passar um script que eu uso em todos meus jogosRenatoBarreto escreveu:Magnatah escreveu:Você pode implementar IPointerClickHandler interface para o seu script de objeto, algo assim:
- Código:
public class Exemplo: MonoBehaviour , IPointerClickHandler
{
public bool Clicou, Rajada;
[Range(0, 10)] public float timeTemporario = 3;
// DETECTA SE OCORRE UM CLIQUE
public void OnPointerClick ( PointerEventData pointerEventData)
{
Clicou = true;
timeTemporario = 3;
}
public void OnPointerDown ( PointerEventData pointerEventData)
{
// DETECTA QUE O BOTAO DO MOUSE AINDA ESTA SENDO PRESSIONADO.
if (timeTemporario > 0)
timeTemporario -= Time.deltaTime;
if (timeTemporario <= 0)
Rajada = true;
}
public void OnPointerUp ( PointerEventData pointerEventData)
{
// DETECTA SE OS CLIQUES NÃO ESTÃO MAIS SENDO REGISTRADOS.
Clicou = false;
Rajada = false;
}
}
Vê se Isso Pode Te Dar Uma Ajuda ou Uma Ideia.
Muito obrigado pela resposta, só não entendi uma questão.
Este método funciona com o Input System? Porque no caso, a minha Action está nomeada como Atirar, então dentro do meu método eu consigo fazer referência a IPointerClickHandler ou está é uma outra forma de fazer isto?
[list=linenums]
[*]public void Atirar(InputAction.CallbackContext context){
[*]}
[/list]
- Código:
public class InputMaster : MonoBehaviour
{
//entradas
public static Vector2 move;
public static bool jump;
public static bool pickUp;
public static Vector2 mouseFps;
public static bool x;
public static bool stop;
public static bool back;
public static bool swapCam;
public static bool pause;
public static bool cancel;
private InputActions inputActions;
void Awake()
{
inputActions = new InputActions();
}
void Update()
{
Inputs();
}
void Inputs()
{
move = inputActions.Player.Move.ReadValue<Vector2>();
jump = inputActions.Player.Jump.triggered;
mouseFps = inputActions.Player.MouseFps.ReadValue<Vector2>();
x = inputActions.Player.x.triggered;
back = inputActions.Player.Back.triggered;
stop = inputActions.Player.Stop.triggered;
pickUp = inputActions.Player.PickUp.triggered;
swapCam = inputActions.Player.SwapCam.triggered;
cancel = inputActions.Player.Cancel.triggered;
pause = inputActions.Player.Pause.triggered;
}
private void OnEnable()
{
inputActions.Enable();
}
private void OnDisable()
{
inputActions.Disable();
}
}
vc pode chamar os botões como se fosse o antigo input chamando InputMaster.NomedaVariavel
diegopds- Mestre
- PONTOS : 3420
REPUTAÇÃO : 52
Idade : 26
Respeito as regras :
Re: [RESOLVIDO] Dúvida com o Novo Input System
diegopds escreveu:Não sei se vc sabe o basico do novo input, mas vou passar um script que eu uso em todos meus jogosRenatoBarreto escreveu:Magnatah escreveu:Você pode implementar IPointerClickHandler interface para o seu script de objeto, algo assim:
- Código:
public class Exemplo: MonoBehaviour , IPointerClickHandler
{
public bool Clicou, Rajada;
[Range(0, 10)] public float timeTemporario = 3;
// DETECTA SE OCORRE UM CLIQUE
public void OnPointerClick ( PointerEventData pointerEventData)
{
Clicou = true;
timeTemporario = 3;
}
public void OnPointerDown ( PointerEventData pointerEventData)
{
// DETECTA QUE O BOTAO DO MOUSE AINDA ESTA SENDO PRESSIONADO.
if (timeTemporario > 0)
timeTemporario -= Time.deltaTime;
if (timeTemporario <= 0)
Rajada = true;
}
public void OnPointerUp ( PointerEventData pointerEventData)
{
// DETECTA SE OS CLIQUES NÃO ESTÃO MAIS SENDO REGISTRADOS.
Clicou = false;
Rajada = false;
}
}
Vê se Isso Pode Te Dar Uma Ajuda ou Uma Ideia.
Muito obrigado pela resposta, só não entendi uma questão.
Este método funciona com o Input System? Porque no caso, a minha Action está nomeada como Atirar, então dentro do meu método eu consigo fazer referência a IPointerClickHandler ou está é uma outra forma de fazer isto?
[list=linenums]
[*]public void Atirar(InputAction.CallbackContext context){
[*]}
[/list]antes vc deve configurar um arquivo que vc cria na unity input asset se não me engano depois configura os botões que vc quer usar,
- Código:
public class InputMaster : MonoBehaviour
{
//entradas
public static Vector2 move;
public static bool jump;
public static bool pickUp;
public static Vector2 mouseFps;
public static bool x;
public static bool stop;
public static bool back;
public static bool swapCam;
public static bool pause;
public static bool cancel;
private InputActions inputActions;
void Awake()
{
inputActions = new InputActions();
}
void Update()
{
Inputs();
}
void Inputs()
{
move = inputActions.Player.Move.ReadValue<Vector2>();
jump = inputActions.Player.Jump.triggered;
mouseFps = inputActions.Player.MouseFps.ReadValue<Vector2>();
x = inputActions.Player.x.triggered;
back = inputActions.Player.Back.triggered;
stop = inputActions.Player.Stop.triggered;
pickUp = inputActions.Player.PickUp.triggered;
swapCam = inputActions.Player.SwapCam.triggered;
cancel = inputActions.Player.Cancel.triggered;
pause = inputActions.Player.Pause.triggered;
}
private void OnEnable()
{
inputActions.Enable();
}
private void OnDisable()
{
inputActions.Disable();
}
}
vc pode chamar os botões como se fosse o antigo input chamando InputMaster.NomedaVariavel
Obrigado pela resposta. Então, no início, quando comecei a estudar sobre o Input System eu vi muitos tutoriais que em as pessoas estava usando o "Invoke Unity Events" no Behavior e apesar de parecer mais fácil de usar, eu não estava encontrando muito mais informações sobre este método. Com o Send Menssages, que é o método que eu imagino que você também está usando, eu encontrei mais informações e tutorias, inclusivo este cursinho na própria Unity.
https://learn.unity.com/tutorial/challenge-2-configure-the-wheel-drive-component-s-handbrake-input?uv=2020.1&projectId=5fc93d81edbc2a137af402b7#5fc7de79edbc2a075144bec3
Vou deixar aqui para ajudar outras pessoas no Fórum, pois não vejo falarem muito aqui sobre o Input System.
RenatoBarreto- Iniciante
- PONTOS : 1390
REPUTAÇÃO : 5
Idade : 33
Respeito as regras :
Tópicos semelhantes
» Novo input system
» [RESOLVIDO] Problema no Input System
» [RESOLVIDO] Analogico Virtual (Mobile input)
» [RESOLVIDO] erro: ''ArgumentException: Input Button jump is not setup'' ?
» Duvida sobre Input.GetKeyDown
» [RESOLVIDO] Problema no Input System
» [RESOLVIDO] Analogico Virtual (Mobile input)
» [RESOLVIDO] erro: ''ArgumentException: Input Button jump is not setup'' ?
» Duvida sobre Input.GetKeyDown
SchultzGames :: UNITY 3D :: Resolvidos
Página 1 de 1
Permissões neste sub-fórum
Não podes responder a tópicos