Контроллер джойстика работает в редакторе, но не в встроенной игре - PullRequest
0 голосов
/ 18 сентября 2018

Как следует из названия, я подключил USB-контроллер, к единству которого работал отлично.Я сопоставил конкретные ключи, которые будут использоваться, и это работает без проблем.Однако, когда я собрал свою игру и запустил ее, мой контроллер больше не работает над ней.Я попытался отредактировать входы на странице запуска игры (где вы можете редактировать графику и т. Д.), Я попытался назначить кнопку на входах, дважды щелкнув по ней, она не читает входные данные моего контроллера, независимо от того, какую кнопку я нажимаю,

Это не мой контроллер, я думаю, что это неправильно, поскольку я могу играть в другие игры, используя его.Я попробовал СЭЗ, и в тот момент, когда я подключил свой контроллер и запустил игру, игра сразу обнаружила его и изменила управление с клавиатуры на контроллер.Он работает в редакторе Unity, но в финальной сборке он даже не обнаруживает его.

Как я могу это исправить?

1 Ответ

0 голосов
/ 18 сентября 2018

Далее следует простой класс для сбора некоторых интересных данных, которые вы можете использовать для отладки ввода, таких как имя подключенных в данный момент джойстиков, значения осей ввода, и ведение журнала последних 10 нажатых клавиш. Все данные собираются методом Update() и выводятся в верхний левый угол экрана с помощью OnGUI().

using System;
using System.Collections.Generic;
using UnityEngine;

public class RecordControllerInput : MonoBehaviour {

    private string[] joystickNames;
    private float xAxis, yAxis;
    private List<string> lastPressedKeys = new List<string>();

    void Update () {
        joystickNames = Input.GetJoystickNames();
        xAxis = Input.GetAxis("Horizontal");
        yAxis = Input.GetAxis("Vertical");

        foreach ( KeyCode curKey in Enum.GetValues(typeof(KeyCode)) )
        {
            if (Input.GetKeyDown(curKey))
            {
                lastPressedKeys.Add(curKey.ToString());
                if (lastPressedKeys.Count > 10)
                    lastPressedKeys.RemoveAt(0);
            }
        }
    }

    private void OnGUI()
    {
        GUILayout.Label("Joysticks:");
        foreach (var curName in joystickNames)
            GUILayout.Label(string.Format("   {0}", curName));
        GUILayout.Label(string.Format("Axes: ({0}, {1})", xAxis, yAxis));

        GUILayout.Label("Last pressed keys:");
        foreach (var curKeyName in lastPressedKeys)
            GUILayout.Label(string.Format("   {0}", curKeyName));
    }
}

Создайте пустую сцену, добавьте этот сценарий к любому объекту (это может быть основная камера, если хотите) и проверьте, соответствуют ли выходные данные вашим ожиданиям (как в Unity Editor, так и в вашем встроенном проекте). Вот снимок экрана со скриптом, работающим на моем компьютере и собирающим подключенный USB-контроллер Xbox, движения, которые я совершил по осям, и нажатой клавишей (как на клавиатуре, так и на контроллере).

screenshot

Если ваш usb-контроллер обнаружен двигателем, он должен хотя бы появиться в выводимом списке. Если этого не произойдет, это может указывать на ошибку в Unity или какую-то несовместимость с вашим конкретным контроллером USB, и в этом случае я бы посоветовал вам обратиться за более специализированной помощью к их форумам или связаться с их поддержкой.

...