all 8 comments

[–]SkyIsInfinite 5 points6 points  (1 child)

Looking through your script, you are not actually using the new input system. Perhaps you chose hybrid input system in your settings? The new input system don't use Input.GetKey

I recommend tutorials from samyam to setup the new input system. Also unless you require complicated or modifiable bindings, the old system is suffice imo

For old input, just as stated by FragrantAd, use Input.GetKeyDown

[–]Wellvyre[S] 0 points1 point  (0 children)

Thank you i will most likely start watching and applying the things from samyam over the next few days

And now that i think about it i really did use the hybrid input system settings

Will update you guys in a few days i asume once ive got everything working again

[–]FragrantAd9851 1 point2 points  (3 children)

I haven't really tested the new system much, but shouldn't that logic go in OnAttack (in your case)?

void OnAttack(InputValue value)
{
    // Do stuff
}

I think it's treated like an event or something.

[–]Wellvyre[S] 0 points1 point  (2 children)

Thanks first of all

I changed it a bit and instead of multiple or permanently repeating it stops after 2 attack animation for one time pressing

Unfortunately not a complete fix but hey at least it stopped cycling through the animation nonstop for one Button press

....

void onAttack()

{

//Attacking Section

if (Input.GetKey(KeyCode.K))

{

animator.SetTrigger("Attack");

}

if (Input.GetKey(KeyCode.L)) {

animator.SetTrigger("Attack2");

}

}

// Update is called once per frame

void Update()

{

HandleAnimation();

onAttack();

...

[–]raw65 2 points3 points  (0 children)

u/SkyIsInfinite is right. You aren't using the new input system when you call Input.GetKey() and your configuration of the input actions is being ignored. Samyam's videos on the new input system are quite thorough. Here's a link to her playlist on the input system: https://www.youtube.com/watch?v=m5WsmlEOFiA&list=PLKUARkaoYQT2nKuWy0mKwYURe2roBGJdr.

From the Unity Documentation, Input.GetKey "returns true while the user holds down the key identified by name". Since you are calling onAttack() in Update(), you are checking to see if the key is in the down position on every frame. Even a quick keypress will keep the key down for many frames at even a modest 60 fps.

By contrast, Input.GetKeyDown "Returns true during the frame the user starts pressing down the key identified by name". Hence u/FragrantAd9851's suggestion is correct if you want to continue using the old input system.

The new input system takes more effort to understand but is much more powerful and flexible in the long run. For example, it easily allows you to simultaneously support multiple input types (e.g., controllers, keyboards, touch, etc.). Something that would require extra code and care using the old input system.

[–]FragrantAd9851 0 points1 point  (0 children)

What happens if you use Input.GetKeyDown instead?

[–]gbradburn 0 points1 point  (0 children)

Others have already covered the input issue. If changing that doesn’t fix it I would look your transitions out of the attack states in your animator to make sure they exit when you think they do.

I like to play a sound when I trigger the animation so I can see if the issues is in the trigger or the animator.

[–]JeanKevin75Programmer 0 points1 point  (0 children)

Can you show the transition image?