• Как уменьшить размер проекта (папка Library)?

    GavriKos
    @GavriKos Куратор тега Unity
    Папку Library НУЖНО добавлять в гитогнор - она нужна только на вашем компе.
    Ответ написан
    Комментировать
  • Как сделать плавное равномерное передвижение?

    @rPman
    Ты используешь Vector3.Lerp который считает расположение точки между двумя указанными позициями (у тебя это текущая позиция и та что пришла по сети), третий параметр должен быть при значении 0 и 1 соответственно первой позиции и второй, при значениях больше - позиция будет интерполирована дальше линейно, у тебя же там speed*Time.deltaTime что это значит я полагаю ты сам не понимаешь.

    Наверное ты хотел чтобы позиция на экране была между предыдущей и новой в зависимости от того на сколько время отличается? т.е. прилетел пакет быстро, интерполяция на короткое расстояние, если с задержкой - то на далекое?

    Ты пробовал просто позицию полученную по сети подставлять без интерполяции?

    p.s. без относительно фреймворка, передавай не позицию объекта, а его управление (команды на изменение поведения, повтороты, изменения скорости и т.п., и соответственно считай его новые координаты на удаленном клиенте точно так же как на сервере, но жестко привязывая к тикам времени, кодить такое сложнее но зато скроет лаги очень хорошо (пока взаимодействие не начнется само собой)
    Ответ написан
    1 комментарий
  • Мне нужно сделать спавнер на Unity3D?

    freeExec
    @freeExec
    Участник OpenStreetMap
    Если вы собрались программировать, то нужно включать свою логику.
    Вот вы говорите у вас спавн работает одни раз. Значит очевидно что в ваш IF выполнение кода не заходит. Следовательно проблема в условие. А поэтому надо пойти и проверить, чему же оно на самом деле равняется. Думаю это сразу натолкнёт на мысли, где у вас ошибка.
    Ответ написан
    Комментировать
  • Мне нужно сделать спавнер на Unity3D?

    KraGenDeveloper
    @KraGenDeveloper
    Unity Developer
    Корутину юзать нужно а не апдейт.
    IEnumerator SpawnObject()
        {
            while (true)
            {
                yield return new WaitForSeconds(timeBtwSpawn);
                Instantiate(spike, transform.position, Quaternion.identity);
                // Мутишь условие что бы остановить корутину например если объектов более 10
            }
        }


    для старта - StartCoroutine(SpawnObject());

    Для остановкиStartCoroutine(SpawnObject());
    Всё
    Ответ написан
    Комментировать
  • Как переместить курсор мыши по середине экрана?

    @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
    
    }
    Ответ написан
    2 комментария
  • Как сделать сортировку Ui-элементов в Unity по убыванию?

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

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

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

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

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

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

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

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

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

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

    KraGenDeveloper
    @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"); это ты вызываешь параметер по которому включается анимация. Если ты не понимаешь как работать с анимациями вот годный урок - Видео
    И документация по получению нажатой кнопки - Получение нажатой кнопки
    Получение касания кнопки/мышки и т.д и т.п.
    Если помог отметь пожалуйста решением буду благодарен :)
    Ответ написан
    6 комментариев
  • Как убрать ошибку в коде?

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

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

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

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

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

    Но в целом он никак не влияет - лишь бы однородные элементы были рядом (например поля и свойства).
    А методы всё равно через f12 искать будешь.
    Ответ написан
    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
            }
        }
    }
    Ответ написан
    1 комментарий
  • Почему я не могу сохранить List в json?

    freeExec
    @freeExec
    Участник OpenStreetMap
    Потому что надо указывать, что класс [Serializable]
    Ответ написан
    Комментировать