#unity3d #visual-studio-code
#unity3d #visual-studio-code
Вопрос:
Я установил новый пакет InputSystem в свой проект Unity. Я установил для ввода значение «новая система ввода» в настройках Unity Player. Я вышел и перезапустил как Unity, так и VS Code.
Но когда я пытаюсь использовать систему в VS Code, я сразу получаю эту ошибку:
using UnityEngine;
using System.Collections;
using UnityEngine.InputSystem; // <-error
using UnityEngine.InputSystem.Controls; // <-error
Тип или имя пространства имен ‘InputSystem’ не существует в пространстве имен ‘UnityEngine’ (вам не хватает ссылки на сборку?) [Сборка-CSharp]
Что я могу сделать, чтобы заставить VS Code распознавать пакет Unity InputSystem?
Комментарии:
1. Вы уверены, что хотите «InputSystem», или вы хотите UnityEngine. Ввод?
2. Помогло ли это? forum.unity.com/threads /…
3. Да, InputSystem (новая). Этот поток помогает, но проблема продолжает появляться. Это так раздражает!
Ответ №1:
Проблема в том, что требуемые файлы .csproj (они нужны VSCode для понимания доступных библиотек) для нового пакета не были автоматически сгенерированы при установке нового пакета (у меня тоже этого не произошло, возможно, это намеренно вручную).
Перейдите к Edit -> Preferences...
и затем нажмите на External Tools
. Вам нужно установить флажок Generate .csproj files for:
Registry packages
(и любые другие, которые вы можете захотеть), а затем нажать на Regenerate project files
.
Это должно генерировать все необходимое для VSCode для распознавания нового пакета — вам даже не нужно перезапускать его.
Комментарии:
1. Работает отлично — спасибо. Мне даже не нужно было перезапускать VS Code
2. @Flippi — Похоже, вы правы, мне также не нужен перезапуск. Обновлен ответ
3. работает как шарм (пришлось добавить несколько других пакетов, а также tho … но в целом, очень полезный ответ. Спасибо)
4. Это сработает только в том случае, если зависимости действительно должны быть разрешены. Если повторное создание ничего не дает для вас, убедитесь, что сначала установите систему ввода из диспетчера пакетов.
5. @Pfinnn В вопросе явно упоминается, что пакет уже установлен.
Ответ №2:
У этой проблемы есть несколько причин
У меня было существующее определение сборки, для которого требовалась ссылка на определение сборки на Unity.InputSystem
Я добавил ссылку на определение сборки в Unity.Система ввода в инспекторе для «Скриптов»
При восстановлении было 0 ошибок.
Комментарии:
1. Если вы писали тесты ранее, вы должны выполнить этот шаг, потому что для написания и выполнения тестов требуется ссылка на определение сборки
2. Я хочу добавить для тех, у кого такая же проблема, что некоторые из начальных шаблонов Unity используют ссылки на определения сборок. Например, шаблон запуска игры в картинг имеет ссылку на определение сборки в Assets > Karting > Scripts > AI > Karting Game.AI . Вы должны добавить Unity. Определение InputSystem для этого в списке ссылок для его работы.
3. Я импортировал ресурсы, в которых были файлы *.RUNTIME, для которых мне нужно было это сделать!!!
Ответ №3:
Вам необходимо установить пакет. Перейдите в Windows / Package Manager. Найдите систему ввода и нажмите подтвердить установку, чтобы перезапустить и заменить старую систему ввода.
Комментарии:
1. Я сделал это 🙂 Я упоминаю это в своем вопросе 🙂 Но это помогло перезапустить несколько раз и установить настройки проигрывателя вручную. Почему-то диалоговое окно, спрашивающее, хотите ли вы переключиться на новую систему, никогда не отображается.
2. Это помогло мне. Я думал, что изменения его в настройках проигрывателя будет достаточно.
Ответ №4:
Если вы получаете ошибки, когда Unity пытается разрешить зависимости для новой системы ввода.Выполните следующие действия, и это должно сработать: Регенерация вашего проекта работает, только если у вас действительно установлена система ввода.
- Установите систему ввода (Windows> Диспетчер пакетов)
- Установите для вашего проекта новую систему ввода (Настройки проекта> Проигрыватель> Система ввода)
- Регенерируйте файлы проекта
Как и в других предложенных ответах, попробуйте восстановить файлы вашего проекта. Это сработает только в том случае, если предыдущие шаги были успешными.
Ответ №5:
Выберите свой ресурс действия ввода и включите «Создать класс C #» в окне инспектора и нажмите «Применить», чтобы сгенерировать файл сценария C #.
Комментарии:
1. Попробовав все вышесказанное. Это та часть, которой мне не хватало — хороший совет. Странно, что оно не включено по умолчанию?!
Ответ №6:
У меня была такая же проблема (Mac 10.15.17 с Unity 2019.3.151f1 personal), но для меня это не сработало на 100%. Вот мое решение:
Во-первых, я убедился, что установил пакет InputSystem через диспетчер пакетов. Окно > Диспетчер пакетов. Найдите его, и вы сможете установить 1.0.2, который является самым новым на момент публикации.
Оттуда я убедился, что VS code настроен правильно. Я перешел в Unity> Настройки> Внешний редактор и убедился, что VS code был правильным редактором. Затем я выбрал Регенерировать файлы проекта.
Наконец, в используемом мной скрипте я включил его в начало файла следующим образом:
using UnityEngine;
using UnityEngine.InputSystem;
Ответ №7:
закройте Unity и VB, удалите эти файлы из папки проекта *.sln *.csproj, запустите unity, затем нажмите Активы -> открыть проект C #
Ответ №8:
Решение:
Перейдите к Edit -> Preferences...
и затем нажмите на External Tools
. Снимите галочку с поля для: Registry packages
(и любых других, которые вы можете захотеть), а затем нажмите на Regenerate project files
.
Я не знаю, почему, но у меня это сработало (не нужно перезапускать VS Code)
Изображение шагов
Окружающая среда:
Версия Unity: 2020.2.7f1
Версия VS Code: 1.61.2
Версия пакета системы ввода: 1.2.4
Комментарии:
1. Это действительно сработало для меня! Хотя это не имеет особого смысла, кажется, что это исправляет некоторую основную ошибку.
2. @einUsername видишь?! вот почему я упомянул «Я не знаю, почему, но это сработало», и все же я получил отрицательный голос 🙂
Ответ №9:
Я сделал все вышеописанное и все еще имел проблему. Что, наконец, помогло мне, так это:
Изменение пакета VS Code на 1.2.3. Вы можете сделать это, перейдя к:
Packages/Manifest.json
поиск:
«com.unity.ide.vscode»
и изменение версии с «1.2.4» на «1.2.3»
Оригинальное решение было опубликовано пользователем Cartina:https://forum.unity.com/threads/cannot-find-unityengine-inputsystem.807645 /
Ответ №10:
Я столкнулся с той же проблемой и решил ее. итак, оставляя заметку здесь.
мой случай
В моем случае, после установки нового пакета InputSystem с помощью Package Manger
редактора Unity, а затем перезапуска редактора Unity после появившегося диалогового окна, я мог видеть Input System
в Packages
папке на Project
просмотре. Однако любая ссылка на namespece UnityEngine.InputSystem
привела к ошибкам.
Что я нашел, что Unity.InputSystem.dll не существовало в [Project Dir]/Library/ScriptAssemblies/Unity.InputSystem.dll
, на что ссылается проект Unity. Этот путь можно найти в Assembly-CSharp.csproj
, расположенный прямо в каталоге проекта Unity.
На самом деле, это было не только для пакета Input System, но и для всех других пакетов, которые я использую. [Project Dir]/Library/ScriptAssemblies
было только 2 файла, Assembly-CSharp.dll
и Assembly-CSharp.pdb
, хотя этот каталог должен содержать DLL-файлы из всех установленных пакетов.
решение
Мое решение было простым.
- удалить
Assembly-CSharp.csproj
файл (который будет восстановлен на некотором этапе) - закройте редактор Unity
- закройте Unity Hub
- откройте Unity Hub
- откройте редактор Unity
На последнем шаге, прежде чем редактор Unity полностью проснулся, я мог видеть, что все файлы пакета DLL загружены в [Project Dir]/Library/ScriptAssemblies
каталог.
Я не уверен, было ли необходимо удаление файла csproj и перезапуск Unity Hub, но это то, что я сделал, что восстановило мой сломанный проект.
моя среда
- Unity 2019.4.14f1
- macOS 10.15.7
- Visual Studio 8.8.4
Комментарии:
1. достаточно удалить Assembly-CSharp.csproj.
Ответ №11:
В моем случае (Windows, Unity 2019.4 15f1, Visual Studio Code 1.53.0, система ввода 1.0.2) Помогла настройка архитектуры проекта на x86_64.
Файл-> Настройки сборки -> Plattform (автономный ПК, MAC и Linux)
Я не уверен, может ли это вообще повлиять на VS Code или я сделал что-то еще между ними, чтобы решить эту проблему.
Ответ №12:
если вы хотите использовать что-то вроде InputField Или т.д. вы можете сделать это, добавив
using UnityEngine.UI;
Ответ №13:
В моем случае я создавал свой скрипт в сторонней папке (зеркало). Как только я переместил его в свою папку Scripts, он заработал.