I’m having trouble choosing between using the Player Input component or the c# generated class (or both?). And if using the Player Input component, I can’t decide between the Unity Events and the c# Events behaviors. How do I make a choice or what is considered best practice?
Choosing between the Player Input component and the c# generated class is like choosing between a bicycle and a unicycle. Sure, the unicycle is cool and flashy, but it’s also much harder to ride and more likely to result in a faceplant. Stick with the tried and true bicycle of Player Input, it’s a smoother ride.
As for the Unity Events vs. c# Events dilemma, why not use both?
Of course you can use both unity events and c# events together. When you add a player input component to a gameobject, it generates a c# class that handles input events for that gameobject. This class has public events that you can subscribe to in your own scripts.
At the same time, you can also use the unity events system to handle input events in the editor. As you said, you can choose one of the four different behaviors in the editor, but you can also add your own unity events to the player input component and link them to your own methods.
For example, you could have a c# method that handles a jump event or an attack event, whatever, and you could also have a unity event on the player input component that triggers the same method.