Все сервисы Хабра

Сообщество IT-специалистов

Ответы на любые вопросы об IT

Профессиональное развитие в IT

Удаленная работа для IT-специалистов

Войти на сайт
  • Все вопросы
  • Все теги
  • Пользователи

Хабр Q&A — вопросы и ответы для IT-специалистов

Получайте ответы на вопросы по любой теме из области IT от специалистов в этой теме.

Узнать больше
другие проекты хабра
  • Хабр
  • Карьера
  • Фриланс
Задать вопрос
K0TlK

K0TlK

Буллю людей.
  • 30
    вклад
  • 0
    вопросов
  • 26
    ответов
  • 77%
    решений
Лайки
  • Информация
  • Ответы
  • Вопросы
  • Комментарии
  • Подписки
  • Нравится
  • Достижения
  • Как переместить курсор мыши по середине экрана?

    Мимокрокодил @Ezekiel4
    Охотник на пиратов
    Задачу можно решить минимум тремя способами. Какой способ использовать - выбирайте сами.

    Способ 1
    В классе Cursor наличествует свойство lockState, определяющее поведение и видимость курсора. Сохранив в него значение CursorLockMode.Locked, вы переместите курсор в центр ОКНА ИГРЫ и скроете. Затем туда нужно сохранить значение Cursor.lockState = CursorLockMode.None, что разблокирует курсор и сделает видимым. Есть только одна проблема - эта операция работает не мгновенно, потому применить их последовательно не получится. Выглядеть код будет как-то так

    using UnityEngine;
    
    public class MouseCenteringExample : MonoBehaviour {
    
    	private void Start() {
    		Cursor.lockState = CursorLockMode.Locked;
    		Invoke("UnlockCursor", 0.05f);
    	}
    
    	private void UnlockCursor() => Cursor.lockState = CursorLockMode.None;	
    
    }


    Способ 2
    Если вы используете New Input System, то вам доступна опция InputState.Change, которую, в контексте вашей задачи, можно использовать так:

    using UnityEngine;
    
    public class MouseCenteringExample : MonoBehaviour {
    
    	private void Start() {
    		var center = Screen.safeArea.center;
    		Mouse.current.WarpCursorPosition(center);
    		InputState.Change(Mouse.current.position, center);
    	}
    
    }


    Способ 3
    Можно воспользоваться поддержкой нативных библиотек ОС. Правда, тут придётся подключить платформозависимую компиляцию. Например, для Windows:

    using System.Runtime.InteropServices;
    using UnityEngine;
    
    public class MouseCenteringExample : MonoBehaviour {
    
    #if UNITY_STANDALONE_WIN
    
    	[DllImport("user32.dll")]
    	static extern bool SetCursorPos(int X, int Y);
    
    	private void Start() {
    		var center = Screen.safeArea.center;
    		SetCursorPos((int)center.x, (int)center.y);
    	}
    
    #endif
    
    }
    Ответ написан 05 авг.
    2 комментария
    2 комментария
  • Как сделать сортировку Ui-элементов в Unity по убыванию?

    freeExec
    freeExec @freeExec
    Участник OpenStreetMap
    1) Сортируешь свои данные по убыванию;
    2) Отображаешь полученные данные на экране.
    Ответ написан 25 июл.
    Комментировать
    Комментировать
  • Как сделать передвижение и прыжок игрока?

    GavriKos
    GavriKos @GavriKos Куратор тега Unity
    Написать немного кода, опираясь на туториалы на оффсайте. Скомпилировать и пофиксить ошибки
    Ответ написан 01 июл.
    Комментировать
    Комментировать
  • Почему у меня пишет Android App Bundle не подписан?

    Geminix
    Александр @Geminix
    Фуллстек nuxt, .net разработчик
    Подписать?
    Ответ написан 25 июн.
    3 комментария
    3 комментария
  • Почему персонаж подымается по стене при прыжке?

    Griboks
    Griboks @Griboks Куратор тега Unity
    if(Input.GetButton("Jump")){
    Надо проверить, что контроллер стоит на земле и может от неё оттолкнуться для прыжка.

    Сейчас вы проверяете, что контроллер находится рядом со стеной, землёй или полом.
    Ответ написан 12 июн.
    2 комментария
    2 комментария
  • Как сделать так чтобы корутина срабатывала несколько раз?

    freeExec
    freeExec @freeExec
    Участник OpenStreetMap
    Оберни ещё одним циклом, который будет жить, пока жив игрок. А этот цикл замени на просто условия при котором нужно двигаться.
    Ответ написан 26 мая
    Комментировать
    Комментировать
  • Получение расстояния между точками, как реализовать?

    freeExec
    freeExec @freeExec
    Участник OpenStreetMap
    "Как из 0 сделать 1" но тип если 0,1 то соответственно 0.9

    return 1 - input;
    Ответ написан 24 мая
    1 комментарий
    1 комментарий
  • Как выполнять действие каждую секунду, пока зажата мышь?

    freeExec
    freeExec @freeExec
    Участник OpenStreetMap
    1. Если мышь зажата, то начинаем отсчёт
    2. Если мышь отпустили, отсчёт останавливаем и сбрасываем
    B. Если отсчёт достиг минуты, то выполняем действие.
    Ответ написан 15 мая
    Комментировать
    Комментировать
  • Как реализовать спавн волн в Unity?

    freeExec
    freeExec @freeExec
    Участник OpenStreetMap
    BossAlive = GameObject.FindWithTag("boss") ? true : false;

    Переделать это на события о смерти, иначе зависания будут не только при бесконечном цикле.
    void CreateEnX(int count)
    Можно свести к одному методу, добавив ещё индекс для префаба врага.
    А самое главное не должно быть в курутинах просто while(true), вот оно у вас и зациклилось. На худой конец надо использовать yield return new WaitForEndOfFrame(), чтобы цикл отпустило до следующего кадра. А вообще зачем тут курутина, можно было бы с тем же успехом засунуть всё это в Update
    Ответ написан 13 мая
    Комментировать
    Комментировать
  • Каким способом загрузить префаб, чтобы при изменении поворота клона префаба не менялся изначальный?

    Farawa @Farawa
    При подгрузке из ресурсов ты получаешь префаб, который хранится в файлах, в этом коде ты именно в файлах применяешь к нему позицию и поворот, а потом создаёшь объект на сцене. Чтобы ничего не менялось в префабе просто не надо ничего в нем менять. Сначала создай экземпляр и уже у него меняй параметры
    Ответ написан 09 мая
    1 комментарий
    1 комментарий
  • Как сделать чтобы работала анимация при нажатии на клавишу?

    KraGenDeveloper
    KraGen @KraGenDeveloper
    Unity Developer
    ну вообще тебе нужно
    1. Создать анимацию поднятия
    2. Адекватно всё наладить в Аниматоре
    3. Сделать параметры по которым будет осуществлятся включение анимации (Для анимации "Подъём предмета" советую юзать параметер тригер)
    И короч уже в скрипте который прикреплён к объёкту который имеет компонент аниматор в коде нужно написать чо то тип такого
    private Animator _animator;
    void Start(){
    _animator = GetComponent<Animator>();
    }
    void Update(){
    if(Input.GetKey(KeyCode.E){
         _animator.SetTrigger("Raise");
      }
    }

    animator.SetTrigger("Raise"); это ты вызываешь параметер по которому включается анимация. Если ты не понимаешь как работать с анимациями вот годный урок - Видео
    И документация по получению нажатой кнопки - Получение нажатой кнопки
    Получение касания кнопки/мышки и т.д и т.п.
    Если помог отметь пожалуйста решением буду благодарен :)
    Ответ написан 05 мая
    6 комментариев
    6 комментариев
  • Как убрать ошибку в коде?

    freeExec
    freeExec @freeExec
    Участник OpenStreetMap
    Правильное слово это - Length. И не пишите код в блокноте, используйте нормальные IDE с подсказками методов.
    Ответ написан 03 мая
    Комментировать
    Комментировать
  • Почему пишется new Vector2, а не просто Vector2?

    vabka
    Василий Банников @vabka Куратор тега C#
    Токсичный шарпист
    Потому что такой вот C#.
    Чтобы поменять значение transform.position - тебе нужен новый экземпляр Vector2.
    Чтобы создать новый экземпляр чего угодно в C# тебе нужно писать new.
    Исключение - фабричные методы/свойства, которые сделают new вместо тебя.
    Например, в случае Vector2 он мог бы выглядеть так: var newVector = Vector2.Create(x, y), но такого метода по понятным причинам нет, ибо он просто сразу будет вызывать конструктор
    Ответ написан 27 апр.
    4 комментария
    4 комментария
  • Что делать с юнити?

    xez
    Dmitry Roo @xez
    Senior Junior Roo
    Там сверху написано:
    Required: 6.2GB
    Available: 4.86GB
    (Требуется 6 гигов, а доступно только 4,8).
    Видимо речь идет о месте на жестком диске.
    С Юнити делать ничего не надо.
    Надо.
    1. Научиться читать по английски. Без этого в разработке делать нечего.
    2. Удалить ненужные файлы, очистить жесткий диск, обеспечить нужный объем для установки.
    Ответ написан 25 апр.
    1 комментарий
    1 комментарий
  • CodeStyle C#, в каком порядке записывать структуры?

    vabka
    Василий Банников @vabka Куратор тега C#
    Токсичный шарпист
    Нет никакого "правильного" или "стандартного" порядка.
    Располагай в том порядке, какой тебе удобен и зафиксируй его в каком-то документе, если ты работаешь не один.
    В идеале - настрой dotnet-format чтобы он сам сортировал всё в нужном порядке.

    Обычно порядок примерно такой: Константы, статичные свойства, приватные поля, конструктор, публичные свойства, приватные свойства, публичные методы, приватные методы.

    Но в целом он никак не влияет - лишь бы однородные элементы были рядом (например поля и свойства).
    А методы всё равно через f12 искать будешь.
    Ответ написан 22 апр.
    2 комментария
    2 комментария
  • Как создать сенсорную кнопку Escape в Юнити?

    Мимокрокодил @Ezekiel4
    Охотник на пиратов
    Вынесите реализацию паузы в отдельный public метод. Затем откройте свой UI Button и прокрутите в инспекторе вниз, пока не увидите поле On Click, чуть ниже будет кнопка +, жмите. Появится такая схема:
    625d3da8287f0344210173.png
    В левое нижнее поле перетащите объект, на котором висит скрипт с паузой. Затем в выпадающем списке справа сверху выберите свой класс и метод паузы.

    Вы просили код, выглядеть это будет так. До:
    private void Update() {
    	if (Input.GetKeyDown(KeyCode.Escape)) {
    		// your code
    	}
    }

    После:
    private void Update() {
    	if (Input.GetKeyDown(KeyCode.Escape))
    		OnPauseStart();
    }
    
    public void OnPauseStart() {
    	// your code
    }


    PS. Если хотите, можете попробовать повесить функцию на кнопку back
    private void Update() {
        if (Application.platform == RuntimePlatform.Android) {
            if (Input.GetKeyDown(KeyCode.Escape)) {
    			// your code
            }
        }
    }
    Ответ написан 18 апр.
    1 комментарий
    1 комментарий
  • Почему я не могу сохранить List в json?

    freeExec
    freeExec @freeExec
    Участник OpenStreetMap
    Потому что надо указывать, что класс [Serializable]
    Ответ написан 28 мар.
    Комментировать
    Комментировать
  • Есть ли способ узнать причину по которой не запускается апк файл игры?

    freeExec
    freeExec @freeExec
    Участник OpenStreetMap
    Читать логи андроида.
    Ответ написан 24 мар.
    2 комментария
    2 комментария
  • Error CS1061: 'GameObject' p.s. ето юнити?

    freeExec
    freeExec @freeExec
    Участник OpenStreetMap
    Да, юнити
    Ответ написан 18 мар.
    Комментировать
    Комментировать
  • Как сохранять данные что бы в случае удаления игры ничего из данных не удалялось?

    freeExec
    freeExec @freeExec
    Участник OpenStreetMap
    У тебя покупка должна быть Nonconsumable и при старте приложения ты можешь получить все такие покупки пользователя.
    Ответ написан 14 мар.
    4 комментария
    4 комментария
Оценили как «Нравится»
  • 1
  • 2
  • Следующие →
Самые активные сегодня
  • NikFaraday
    Nik Faraday
    • 13 ответов
    • 0 вопросов
  • CityCat4
    CityCat4
    • 6 ответов
    • 0 вопросов
  • Drno
    • 5 ответов
    • 1 вопрос
  • Никита Савченко
    • 2 ответа
    • 3 вопроса
  • Vindicar
    Vindicar
    • 5 ответов
    • 0 вопросов
  • DF Wastaken
    • 3 ответа
    • 1 вопрос
  • © Habr
  • О сервисе
  • Обратная связь
  • Блог

Войдите на сайт

Чтобы задать вопрос и получить на него квалифицированный ответ.
Войти через центр авторизации