Question

Right now Im using the WASD keys to control an object. Now I want to use joysticks to do the same. Can anyone show me how to adapt my code to do this? All I want to do is replace the if (Input.getKey)spaces with a an if (Input) space that will use the joysticks to move the boat left and right.

void drive()
{
    //decrease speed
    if (Input.GetKeyDown(KeyCode.S))
    {
        //in Drive
        if (acceleration > 0 && 
            bucketMode == false)
        {
            acceleration-= 250;
        }
        //in Reverse
        else if (acceleration < 0 &&
            bucketMode == true)
        {
            acceleration += 250;
        }
    }

   //Increases Speed 
   if (Input.GetKeyDown(KeyCode.W))
    {
        //in Drive
        if (acceleration < maxSpeed &&
            bucketMode == false)
        {
            acceleration+= 250;
        }
        //in Reverse
        else if (acceleration > minSpeed &&
            bucketMode == true)
        {
            acceleration -= 250;
        }
    }

    //stops the boat and toggles Bucket mode
    if (Input.GetKeyDown(KeyCode.Space))
    {
        acceleration = 0;
        if (bucketMode == false)
        {
            //goes into revers
            bucketMode = true;
            craft.bucket(1); //sends bucket as true
        }
        else
        {
            //goes into drive
            bucketMode = false;
            craft.bucket(0);  //sends bucket as false
        }
    }
    //moves forward if speed is +
    if (acceleration < 0)
    {
        //moves backwards at half the speed than in drive, in a smooth motion, speed depending on user input(acceleration)
        this.transform.Translate(Vector3.left * Time.smoothDeltaTime * ((-acceleration / 500) +1));

        //updates craft speed being displayed
        craft.ChangeSpeed((acceleration/500) * 1.94);
    }
    //moves backward if speed is -
    else if (acceleration > 0)
    {
        //moves forward in a smoothb motion, speed depending on user input(acceleration)
        this.transform.Translate(Vector3.right * Time.smoothDeltaTime * ((acceleration / 250) + 1));

        //updates craft speed being displayed
        craft.ChangeSpeed((acceleration/250) * 1.94);
    }
    //stands still if speed is 0
    else
    {           
    }

    //turns right
    if (Input.GetKey(KeyCode.D))
    {
        //turns the boat to the left smoothly, as speed increases, so does turn angle
        this.transform.Rotate(Vector3.forward * Time.smoothDeltaTime * 25 /* ((2 * acceleration / 250) +1)*/);

        //updates boat information(heading and speed)
        craft.ChangeHeading(1 * Time.smoothDeltaTime * 25 /* ((2 * acceleration / 250) +1)*/);
        craft.ChangeSpeed((acceleration/250) * 1.94);

        //if boat is not moving forwards, moves forward slowly, so boat doesn't turn in place
        if (acceleration == 0)
        {
            this.transform.Translate(Vector3.right * Time.smoothDeltaTime / 2);
        }
    }
    //turns left
    if (Input.GetKey(KeyCode.A))
    {
        //turns the boat to the right smoothly, as speed increases, so does turn angle
        this.transform.Rotate(Vector3.back * Time.smoothDeltaTime * 25 /* ((2 * acceleration / 250) +1)*/);

        //updates boat information(heading and speed)
        craft.ChangeHeading(-1 * Time.smoothDeltaTime * 25 /* ((2 * acceleration / 250) +1)*/);
        craft.ChangeSpeed((acceleration/250) * 1.94);

        //if boat is not moving forwards, moves forward slowly, so boat doesn't turn in place
        if (acceleration == 0)
        {
            this.transform.Translate(Vector3.right * Time.smoothDeltaTime / 2);
        }
    }
}
Was it helpful?

Solution

You have got multiple options here to go with

  1. Use SlimDx
  2. SharpDx
  3. DirectX.

You can use any of these libraries and get the input. Sorry, but it is not as simple as changing if statement.

Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top