• Advertisement

C# Detect which controller pressed a certain button

Recommended Posts

Hey guys,

I'm working on a local multiplayer game that uses multiple controllers (joysticks) on the same computer/console. I downloaded the InControl asset that should help with the input, but I can't find a way to detect which of the connected controllers was used to perform some action (i.e. on which controller was the button pressed). The application detects the actions properly, but it doesn't make any difference if joystick 1 or 2 "sent" the action.

The only way I could accomplish this is to define specific axis (or more precisely, 20 axes for each controller) in Unity's input manager, but that seems too crude, and very unpractical to use within code.

Is there another way to know which joystick performed the given action?

Thanks

Share this post


Link to post
Share on other sites
Advertisement

Since you're using InControl to do it, you'll need to check with InControl's documentation or possibly their source.

If it is the same InControl that is the top hit on Google, it looks like their calls pass an InputDevice as a parameter if you're using their API rather than Unity's input calls. That device would map to the specific controller.

Share this post


Link to post
Share on other sites
3 minutes ago, frob said:

Since you're using InControl to do it, you'll need to check with InControl's documentation or possibly their source.

If it is the same InControl that is the top hit on Google, it looks like their calls pass an InputDevice as a parameter if you're using their API rather than Unity's input calls. That device would map to the specific controller.

I tried with InControl, but couldn't find a way, so I'm asking for any suggestion, not only InControl, but built in Unity or some third party plug in.

Share this post


Link to post
Share on other sites

If you're using Unity's built in input handler for mapped axis values, you'll need to create them all and change the settings to only detect specific joysticks in the "Joy Num" field rather than the default for all joysticks.  

Be aware that the OS can assign a controller to any joystick number.  For example, an xbox controller may be joystick 1, but unplugging it and reattaching it might assign the same controller to joystick 3.  

In one Unity game I worked with they had something like 300 or 400 entries on the input mapping.  All of them were handled by an input mapping class in the code.

Share this post


Link to post
Share on other sites
13 hours ago, frob said:

If you're using Unity's built in input handler for mapped axis values, you'll need to create them all and change the settings to only detect specific joysticks in the "Joy Num" field rather than the default for all joysticks.  

Be aware that the OS can assign a controller to any joystick number.  For example, an xbox controller may be joystick 1, but unplugging it and reattaching it might assign the same controller to joystick 3.  

In one Unity game I worked with they had something like 300 or 400 entries on the input mapping.  All of them were handled by an input mapping class in the code.

Yeah that is the approach I'm using at the moment, I was just wandering if there is a "smarter" way. Thanks anyway.

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now


  • Advertisement
  • Advertisement
  • Popular Tags

  • Advertisement
  • Popular Now

  • Similar Content

    • By Alexander Nazarov
      Hello. I'm newby in Unity and just start learning basics of this engine. I want to create a game like StackJump (links are below). And now I wondering what features do I have to use to create such my game. Should I use Physics engine or I can move objects changing transform manually in Update().
      If I should use Physics can you in several words direct me how can I implement and what I have to use. Just general info, no need for detailed description of developing process.
      Game in PlayMarket
      Video of the game
    • By Dave Haylett
      Hi all. My project is coming along wonderfully, and am starting to consider alpha deployment, and would like your advice.
      My project need access to 10,000 small PNG image files at runtime, each is only a few kilobytes each, which during development I used to load in directly from a fixed path on my HDD whenever one was needed (obviously not a solution for go-live), using something like this:
      img = new WriteableBitmap(new BitmapImage(new Uri(@screenshotsPath + filename)));
      The image would then be blitted onto a buffer screen, etc. etc. At a time, a few dozen would be being used.
      Now I'm thinking about deployment, and also when I produce an update to my app, there could be more images to add to the folders. So I'm considering the best way of a) deploying the images to the user as part of the project, and b) how to most easily handle updates to the app, whereby more images will be added.
      I have just experimented with adding them all as a Resource (!). This inflated the exe from 10mb to 100mb (not a major problem), increased the compile time from 3 secs to 30 secs (annoying), increased RAM usage from 500mb to 1.5gb (not a major problem either), but means that it solves my fixed directory issue, distribution issue, and update issue, simply by having the files all stuck into the executable. Here's the new code I'm using:
      img = BitmapFactory.FromResource("Shots/" + filename);
      The next thing I was going to try was to mark them as Content > Copy if Newer. This would resolve the executable size and RAM usage (and also the directory issue as well), however it seems that I'd need to highlight them all, and move them from Resource to Content. As an up-front job this isn't too bad, but as I add new images to the project, I'll need to go in and do this every time, which gets annoying, as the VS2015 default is Resource. Also, I'm not sure how this would work in terms of updates. Would something like ClickOnce deployment recognise new PNGs and install them to the users?
       
      I also have 3,000 ZIP files (~500kb each) which also need deploying and updating in the same way. These are currently read directly from my HDD until I can find a permanent solution for adding these to the project as well.
      Can anyone thing of a better way of doing what I'm trying to achieve?
      Thanks for any help folks.
       
    • By GytisDev
      Hello,
      without going into any details I am looking for any articles or blogs or advice about city building and RTS games in general. I tried to search for these on my own, but would like to see your input also. I want to make a very simple version of a game like Banished or Kingdoms and Castles,  where I would be able to place like two types of buildings, make farms and cut trees for resources while controlling a single worker. I have some problem understanding how these games works in the back-end: how various data can be stored about the map and objects, how grids works, implementing work system (like a little cube (human) walks to a tree and cuts it) and so on. I am also pretty confident in my programming capabilities for such a game. Sorry if I make any mistakes, English is not my native language.
      Thank you in advance.
    • By Ovicior
      Hey,
      So I'm currently working on a rogue-like top-down game that features melee combat. Getting basic weapon stats like power, weight, and range is not a problem. I am, however, having a problem with coming up with a flexible and dynamic system to allow me to quickly create unique effects for the weapons. I want to essentially create a sort of API that is called when appropriate and gives whatever information is necessary (For example, I could opt to use methods called OnPlayerHit() or IfPlayerBleeding() to implement behavior for each weapon). The issue is, I've never actually made a system as flexible as this.
      My current idea is to make a base abstract weapon class, and then have calls to all the methods when appropriate in there (OnPlayerHit() would be called whenever the player's health is subtracted from, for example). This would involve creating a sub-class for every weapon type and overriding each method to make sure the behavior works appropriately. This does not feel very efficient or clean at all. I was thinking of using interfaces to allow for the implementation of whatever "event" is needed (such as having an interface for OnPlayerAttack(), which would force the creation of a method that is called whenever the player attacks something).
       
      Here's a couple unique weapon ideas I have:
      Explosion sword: Create explosion in attack direction.
      Cold sword: Chance to freeze enemies when they are hit.
      Electric sword: On attack, electricity chains damage to nearby enemies.
       
      I'm basically trying to create a sort of API that'll allow me to easily inherit from a base weapon class and add additional behaviors somehow. One thing to know is that I'm on Unity, and swapping the weapon object's weapon component whenever the weapon changes is not at all a good idea. I need some way to contain all this varying data in one Unity component that can contain a Weapon field to hold all this data. Any ideas?
       
      I'm currently considering having a WeaponController class that can contain a Weapon class, which calls all the methods I use to create unique effects in the weapon (Such as OnPlayerAttack()) when appropriate.
  • Advertisement