- Home /
How do I use an Input axis instead of Input.mousePosition???
Hello.. so i'm building a spaceship game with code I got from another project. The inputs used to use mouse to calculate rotation and all that other stuff, but now I'm trying to use an xbox controller with inputs I have already set up. The problem is that I can't use:
float temp = Vector2.Distance(Input.GetAxis (""xbox_mac_R Joystick_Horizontal", screenCenter);
because I get these error messages:
The best overloaded method match for UnityEngine.Vector2.Distance(UnityEngine.Vector2, UnityEngine.Vector2)' has some invalid arguments. And: #1' cannot convert
float' expression to type `UnityEngine.Vector2'
Any help would be excellent! Here is my original code without any errors:
using UnityEngine; using System.Collections;
public class Ship_Rotate : MonoBehaviour {
public float rotateSpeed;
public float centerSize;
public float control;
Rigidbody myBody;
Vector2 screenCenter;
void Start ()
{
screenCenter = new Vector2 (Screen.width/2, Screen.height/2);
myBody = GetComponent<Rigidbody>();
}
void Update ()
{
float temp = Vector2.Distance(Input.GetAxis ("xbox_mac_R Joystick_Horizontal"), screenCenter);
if(Input.GetButton("xbox_mac_LB"))
{
myBody.AddRelativeTorque(0, 0, rotateSpeed * Time.deltaTime);
}
else if (Input.GetButton("xbox_mac_RB"))
{
myBody.AddRelativeTorque(0, 0, -rotateSpeed * Time.deltaTime);
}
if (temp>centerSize)
{
if (Input.GetAxis("xbox_mac_R Joystick_Horizontal") > screenCenter.x + centerSize/2)
{
myBody.AddRelativeTorque (0, rotateSpeed * (Time.deltaTime*temp/control), 0);
}
else if (Input.GetAxis("xbox_mac_R Joystick_Horizontal") <screenCenter.x - centerSize/2)
{
myBody.AddRelativeTorque (0, -rotateSpeed * (Time.deltaTime*temp/control), 0);
}
if (Input.GetAxis("xbox_mac_R Joystick_Vertical") > screenCenter.y + centerSize/2)
{
myBody.AddRelativeTorque (-rotateSpeed * (Time.deltaTime*temp/control), 0, 0);
}
else if (Input.GetAxis("xbox_mac_R Joystick_Vertical") < screenCenter.y - centerSize/2)
{
myBody.AddRelativeTorque (rotateSpeed * (Time.deltaTime*temp/control), 0, 0);
}
}
}
}
Answer by Filhanteraren · Nov 10, 2016 at 08:12 AM
Input.GetAxis return a float so you can´t use it with the Vector2.Distance.
Here is some code from the Unity manual to rotate and object using GetAxis:
using UnityEngine;
using System.Collections;
public class ExampleClass : MonoBehaviour {
public float horizontalSpeed = 2.0F;
public float verticalSpeed = 2.0F;
void Update() {
float h = horizontalSpeed * Input.GetAxis("Mouse X");
float v = verticalSpeed * Input.GetAxis("Mouse Y");
transform.Rotate(v, h, 0);
}
}
Your answer
Follow this Question
Related Questions
How do I use controller knob input like mouse position? (New Input System) 1 Answer
The value of Input.GetAxis("Horizontal") gets stuck when Xbox controller is disconnected... 0 Answers
Input Fields using an Xbox One Controller 0 Answers
How to have multiple types of controller input using the input manager 0 Answers