Джойстик для управления внешним устройством Unity

Используйте управление джойстиком в Unity

Эта статья была написана carzhang, пожалуйста, укажите источник для перепечатки. Все права защищены.
Ссылка на статью: http://blog.csdn.net/cartzhang/article/details/50957100
Автор: carzhang

1. К слову о джойстиках

Контроллер джойстика для XBox почему-то отказывается работать на моем компьютере.
Другие ставят драйвера, у них все нормально, но здесь их не узнают.

Я нашел только цифровой и использовал его соответственно.
Почему вы хотите изучить джойстик?
Потому что в разработке VR здесь требуется много времени, чтобы начать каждый раз, когда вы используете настройки VR, и потому что есть различные аппаратные средства, пистолеты,
шлемы и другие аппаратные элементы управления и кнопки, поэтому я хочу использовать джойстик.Кнопки стиков заменить во время тестирования.

Ниже приведен код для использования джойстика в Unity.

Два, ключевое значение

Ключевое значение джойстика, искал в интернете:

按钮绘制:按钮灵敏度(Button Sensitivity)为1000;
A = button 0
B = joystick button 1
X = joystick button 2
Y = joystick button 3
LB = joystick button 4
RB = joystick button 5
Back = joystick button 6
Start = joystick button 7
Left Analogue Press = joystick button 8
Right Analogue Press = joystick button 9
坐标轴绘制:模拟坐标轴灵敏度(Analog Axis sensitivity)为1,量化后可以为1000;
Left Analog Horizontal = X Axis
Left Analog Vertical = Y Axis
Triggers = 3rd Axis (Left: -1 - 0, Right: 0 - 1) _ (Left Trigger Axis: 9th, Right Trigger Axis: 10th (Both axis are 0-1))
Right Analog Horizontal = 5th axis
Right Analog Vertical = 4th axis
D-Pad Horizontal = 6th Axis
D-Pad Vertical = 7th Axis

Как программа, как использовать код, чтобы получить его?
Простой:

using UnityEngine;
using System.Collections;

public class GetKeyValue : MonoBehaviour {

    public float speed = 10.0F;
    public float rotationSpeed = 100.0F;

    void Update()
    {
        detectPressedKeyOrButton();
    }

     public void detectPressedKeyOrButton()
    {
        foreach (KeyCode kcode in System.Enum.GetValues(typeof(KeyCode)))
        {
            if (Input.GetKeyDown(kcode))
                Debug.Log("KeyCode down: " + kcode);
        }

    }
}

 

Установите этот код на любой объект, а затем нажмите кнопку, чтобы увидеть печать в консоли, и вы узнаете соответствующее значение ключа.

3. Объект управления

Используйте джойстик для управления объектом, потому что при разработке VR здесь требуется много времени, чтобы начать каждый раз, когда вы используете настройку VR, и потому что есть различное оборудование, набор аппаратных элементов управления и кнопок, таких как шлемы с оружием,
поэтому Я хочу использовать клавишу джойстика для замены во время тестирования. Освободите руки, которых не хватает.Предыдущее испытание не может пройти один человек.Нужно вращать шлем,нажимать кнопку и щелкать мышкой.Вам очень нужно больше рук! ! Вот и все! !

Джойстик управляет вращением и движением.
Здесь, если джойстик сдвинуть вперед, объект управления будет двигаться вперед, а левый и правый управляют вращением влево и вправо. Это немного неразумно, но если это полезно, пожалуйста, немного измените его.

using UnityEngine;
using System.Collections;

public class StickCameraControl : MonoBehaviour {

    public float speed = 10.0F;
    public float rotationSpeed = 100.0F;

    void Update()
    {
        float translation = Input.GetAxis("Vertical") * speed;
        float rotation = Input.GetAxis("Horizontal") * rotationSpeed;

        if (Mathf.Abs(translation) <= 0.1*speed)
        {
            translation = 0;
            rotation *= Time.deltaTime;
            transform.Rotate(0, rotation, 0);
        }
        else
        {
            translation *= Time.deltaTime;
            transform.position +=Camera.main.transform.forward * translation;
        }


    }
}

 

Код, используемый для управления вращением и стрельбой из пушки.
Пушка не может двигаться сама по себе, она может только вращаться. Таким образом, код будет следующим:

using UnityEngine;
using System.Collections;

public class StickGunContorl : MonoBehaviour {

    public float speed = 10.0F;
    public float rotationSpeed = 100.0F;
    public KeyCode []FireButton;

    void Update()
    {
        SetFire();
        SetRotate();
    }

    void SetFire()
    {
        if (Input.GetKeyDown(KeyCode.JoystickButton4) || Input.GetKeyDown(KeyCode.JoystickButton5)
            || Input.GetKeyDown(KeyCode.Joystick1Button4) || Input.GetKeyDown(KeyCode.Joystick1Button5))
        {
            Debug.Log(Input.mousePosition);
        }
    }

    void SetRotate()
    {
        //float translation = Input.GetAxis("RightV") * speed;
        float rotation = Input.GetAxis("RightH") * rotationSpeed;
        Debug.Log("gun" + rotation);
        rotation *= Time.deltaTime;
        transform.Rotate(0, rotation, 0);
    }
}

 

Код супер простой. Примечание нет! ! !
Если вы скопируете код напрямую, операция сообщит об ошибке. Причина в том, что у тебя нет RightH,
как ты сюда попал? Смотри сюда, смотри сюда...

Это определено во входных данных, и тогда его можно будет правильно вызвать в коде.

 

Je suppose que tu aimes

Origine blog.csdn.net/Abel02/article/details/112602700
conseillé
Classement