[英]CrossplatformInput Joystick is not working in Unity
I have connected a joystick from the standard assets library from the unity store, but the input is not being read.我已经从统一商店的标准资产库中连接了一个操纵杆,但没有读取输入。 The car can be controlled by the arrow keys,but the joystick is not working.可以通过方向键控制汽车,但操纵杆不起作用。
here is my code这是我的代码
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityStandardAssets.CrossPlatformInput;
public class rearwheeldrive : MonoBehaviour
{
public float maxAngle = 30;
public float maxTorque = 300;
public WheelCollider[] wheelArray;
// Start is called before the first frame update
void Start()
{
}
// Update is called once per frame
void Update()
{
float angle = maxAngle * CrossPlatformInputManager.GetAxis("Horizontal");
float torque = maxTorque * CrossPlatformInputManager.GetAxis("Vertical");
wheelArray[0].steerAngle = angle;
wheelArray[1].steerAngle = angle;
wheelArray[2].motorTorque = torque;
wheelArray[3].motorTorque = torque;
foreach (WheelCollider wheelcollider in wheelArray)
{
Vector3 P;
Quaternion Q;
wheelcollider.GetWorldPose(out P, out Q);
Transform wheelshape = wheelcollider.transform.GetChild(0);
wheelshape.position = P;
wheelshape.rotation = Q;
}
}
}
Even after changing maxAngle * Input.GetAxis("Horizontal");即使改变 maxAngle * Input.GetAxis("Horizontal"); to maxAngle * CrossPlatformInputManager.GetAxis("Horizontal");到 maxAngle * CrossPlatformInputManager.GetAxis("Horizontal"); it takes the arrow key input whilst the joystick is not working.当操纵杆不工作时,它需要箭头键输入。
Code Of Joystick object操纵杆对象代码
using System;
using UnityEngine;
using UnityEngine.EventSystems;
namespace UnityStandardAssets.CrossPlatformInput
{
public class Joystick : MonoBehaviour, IPointerDownHandler, IPointerUpHandler, IDragHandler
{
public enum AxisOption
{
// Options for which axes to use
Both, // Use both
OnlyHorizontal, // Only horizontal
OnlyVertical // Only vertical
}
public int MovementRange = 100;
public AxisOption axesToUse = AxisOption.Both; // The options for the axes that the still will use
public string horizontalAxisName = "Horizontal"; // The name given to the horizontal axis for the cross platform input
public string verticalAxisName = "Vertical"; // The name given to the vertical axis for the cross platform input
Vector3 m_StartPos;
bool m_UseX; // Toggle for using the x axis
bool m_UseY; // Toggle for using the Y axis
CrossPlatformInputManager.VirtualAxis m_HorizontalVirtualAxis; // Reference to the joystick in the cross platform input
CrossPlatformInputManager.VirtualAxis m_VerticalVirtualAxis; // Reference to the joystick in the cross platform input
void OnEnable()
{
CreateVirtualAxes();
}
void Start()
{
m_StartPos = transform.position;
}
void UpdateVirtualAxes(Vector3 value)
{
var delta = m_StartPos - value;
delta.y = -delta.y;
delta /= MovementRange;
if (m_UseX)
{
m_HorizontalVirtualAxis.Update(-delta.x);
}
if (m_UseY)
{
m_VerticalVirtualAxis.Update(delta.y);
}
}
void CreateVirtualAxes()
{
// set axes to use
m_UseX = (axesToUse == AxisOption.Both || axesToUse == AxisOption.OnlyHorizontal);
m_UseY = (axesToUse == AxisOption.Both || axesToUse == AxisOption.OnlyVertical);
// create new axes based on axes to use
if (m_UseX)
{
m_HorizontalVirtualAxis = new CrossPlatformInputManager.VirtualAxis(horizontalAxisName);
CrossPlatformInputManager.RegisterVirtualAxis(m_HorizontalVirtualAxis);
}
if (m_UseY)
{
m_VerticalVirtualAxis = new CrossPlatformInputManager.VirtualAxis(verticalAxisName);
CrossPlatformInputManager.RegisterVirtualAxis(m_VerticalVirtualAxis);
}
}
public void OnDrag(PointerEventData data)
{
Vector3 newPos = Vector3.zero;
if (m_UseX)
{
int delta = (int)(data.position.x - m_StartPos.x);
delta = Mathf.Clamp(delta, - MovementRange, MovementRange);
newPos.x = delta;
}
if (m_UseY)
{
int delta = (int)(data.position.y - m_StartPos.y);
delta = Mathf.Clamp(delta, -MovementRange, MovementRange);
newPos.y = delta;
}
transform.position = new Vector3(m_StartPos.x + newPos.x, m_StartPos.y + newPos.y, m_StartPos.z + newPos.z);
UpdateVirtualAxes(transform.position);
}
public void OnPointerUp(PointerEventData data)
{
transform.position = m_StartPos;
UpdateVirtualAxes(m_StartPos);
}
public void OnPointerDown(PointerEventData data) { }
void OnDisable()
{
// remove the joysticks from the cross platform input
if (m_UseX)
{
m_HorizontalVirtualAxis.Remove();
}
if (m_UseY)
{
m_VerticalVirtualAxis.Remove();
}
}
}
}
Use it Like :使用它喜欢:
public Joystick mJoystick;
float angle = maxAngle * mJoystick.Horizontal;
float torque = maxTorque * mJoystick.Vertical;
EDIT : I have used the same asset, works fine using the below settings.编辑:我使用了相同的资产,使用以下设置可以正常工作。
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityStandardAssets.CrossPlatformInput;
public class TestScript : MonoBehaviour
{
// Use this for initialization
void Start ()
{
}
// Update is called once per frame
void Update ()
{
float angle = CrossPlatformInputManager.GetAxis("Horizontal");
float torque = CrossPlatformInputManager.GetAxis("Vertical");
print("Angle : " + angle + " , Torque : " + torque);
}
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.