Ответы пользователя по тегу C#
  • Unity - BoxCollider2D - Почему происходит коллизия объекта с самим собой?

    CHIDWI
    @CHIDWI
    Unity3D Developer
    Если по правильному то Raycast исходит из центра объекта, и он сразу врезается в свой же коллайдер. Соответственно точку из которой посылается луч, нужно вынести за пределы коллайдера. У вас же обратная ситуация, луч посылается откуда-то из вне со смещением, в центр нашего объекта. Из чего следует вывод, что если между точкой откуда идёт луч и до центра персонажа, нет никаких других коллайдеров, то он попадает в персонажа.
    Вариант решения:
    - Отрисовать луч через Debug.DrawRay или Debug.DrawLine (что-то такое и настроить правильное смещение конечной точки).
    - Экспериментальным путём найти подходящие значения.
    - Создать в персонаже 2 дополнительных ГО и использовать их как конечную и начальную точки луча.
    Ответ написан
    Комментировать
  • Как назначить элементы массива через код?

    CHIDWI
    @CHIDWI
    Unity3D Developer
    Объявляешь через код массив вектор3 и тут же инициализируешь его элементы с заданными координатами.
    Ответ написан
    Комментировать
  • Как реализовать преследование в UNITY, но только по осям X и Z?

    CHIDWI
    @CHIDWI
    Unity3D Developer
    Делай псевдо2д - самый простой вариант, изначально Unity 3d движок и даже когда ты создаёшь 2д проект, там идёт почти такая же обработка как и 3д. Так вот:
    Создаёшь 3д проект, переключаешь камеру в 2д, поворачиваешь "ground" лицом к камере, потом ставишь на неё препятствия из кубов "условно". Создаешь персонажа, делаешь ему управление с передвижением только по 2 нужным осям, кидаешь на него 2д спрайт. А ботов настраиваешь через стандартный NavMesh и вуаля, у тебя 2д игра с 3д возможностями.
    Ответ написан
    9 комментариев
  • Здравствуйте. Возникла довольно популярная проблема. Поможете?

    CHIDWI
    @CHIDWI
    Unity3D Developer
    У вас ошибка в названии метода, а именно FixUpdate(), должно быть FixedUpdate(). В связи с чем инпут у нас не меняет своих значений, isGround = false, ну и со всеми вытекающими. В будущем рекомендую юзать Debug.Log(); или print(); что бы хотя бы понимать, на каком этапе все сломалось.
    Ответ написан
    Комментировать
  • Как запустить поток?

    CHIDWI
    @CHIDWI
    Unity3D Developer
    Возможно не совсем правильно понял вопрос, но в Unity есть встроенный метод который позволяет узнать сколько времени прошло с момента запуска Time.realtimeSinceStartup. Штука в том, что Unity сама решает сколько потоков ей нужно и как их разделять. Вашу идею можно реализовать несколько иначе, например можно сделать основной скрипт "менеджер" который будет в себе вызывать скрипт таймера и main раздельно или когда это нужно.
    Ответ написан
  • Как сместить камеру при удержании какой либо клавиши?

    CHIDWI
    @CHIDWI
    Unity3D Developer
    Можно юзать Input.GetKeyDown("s"), данная ф-ция вызывается только раз при нажатии на кнопку. Или можно скостылить какой-нить bool флаг.
    Ответ написан
    Комментировать
  • Почему не работает прыжок в Unity 2D?

    CHIDWI
    @CHIDWI
    Unity3D Developer
    Очень странный способ чекать землю. А почему бы не использовать встроенные возможности OnCollisionEnter/stay/exit и чекать в них по тегу или имени?
    Ответ написан
  • Поворот персонажа в сторону движения Unity?

    CHIDWI
    @CHIDWI
    Unity3D Developer
    А почему бы поворот влево/вправо не засунуть туда где непосредственно происходит чтение инпутов? Просто когда нажал кнопку влево transform.localscale.x =-1; а вправо наоборот соответственно
    Ответ написан
    Комментировать
  • Как сделать проверку что персонаж стоит на земле?

    CHIDWI
    @CHIDWI
    Unity3D Developer
    bool isJump;
    
    private void Update()
    {
            if (Input.GetKeyDown("space") && !isJump) //проверка на нажатие кнопки и не находимся ли мы в прыжке сейчас
            {
    //вызываем прыжок AddForce или что там у вас.
                isJump = true; //помечаем флаг, что мы прыгнули
            }
    }
    
        private void OnCollisionEnter(Collision collision)
        {
            if (collision.gameObject.tag == "ground") //проверка что обьект столкновения имеет тег ground
            {
                isJump = false; //помечаем что мы столкнулись с землёй и можем снова прыгать
            }
        }
    Ответ написан
  • Как из inputField получить int?

    CHIDWI
    @CHIDWI
    Unity3D Developer
    В инспекторе самому элементу Input Field ставишь Integer(тогда в поле можно будет вписать только целые числа), на выходе, всё равно, будет string и дальше его преобразуешь в int.
    InputField numberInputField = ...; //тут подключаешь своё поле с которого читаешь
    int number = int.Parse(numberInputField.text); //записываешь значение в переменную
    Ответ написан
  • NullReferenceException: Object reference not set to an instance of an object почему?

    CHIDWI
    @CHIDWI
    Unity3D Developer
    Во - первых использовать While -плохо.
    Во - вторых ошибка NullReferenceException, означает что вы пытаетесь получить доступ к обьекту которого нет(null) или пуст, возможно вы его удалили или он еще не создан. Из описанного выплывает что в itemsPanel.transform.childCount - null(пусто). Как вариант можете написать так print("z - " + itemsPanel.transform?.childCount);
    Ответ написан
    5 комментариев
  • Как сделать чтобы при нажатии кнопки появлялась новая панель?

    CHIDWI
    @CHIDWI
    Unity3D Developer
    Создаёшь панель ещё одну и держишь её выключенной, когда что то там сделал то вуаля, включаешь ГО.
    Ответ написан
    Комментировать
  • Делаю бесконечную дорогу но вылетает ошибка: MissingReferenceException?

    CHIDWI
    @CHIDWI
    Unity3D Developer
    Пусть каждый блок сам решает удаляться ему или нет и сам себя удаляет. Перед удалением пусть себя же удалит из коллекции. Это совет если не разбираться в коде.
    Просто где-то у тебя код пытается получить элемент который уже удален и сыпет тебе ошибку. Проверь в какой конкретно момент ошибка появляется как вариант.
    Ответ написан
    Комментировать
  • Написал код движения персонажа, но он не работает, что делать?

    CHIDWI
    @CHIDWI
    Unity3D Developer
    Функции CanJump у вас нет, а вы пытаетесь её вызвать, значит, код или не ваш или вы не понимаете, что пишете.
    void Update () {
        float v = Input.GetAxis ("Vertical");
    		float h = Input.GetAxis ("Horizontal");
    
    		rb.velocity = transform.right * v * 3f;//подходит для игры с видом сверху
    		rb.angularVelocity = -h * 100f;
                    
                    if (Input.GetKeyDown ("space")){
                       rb.Addforce (0, 500);
                    }
    }
    Ответ написан
    Комментировать
  • Как сделать, чтобы персонаж поворачивался в сторону движения в Unity?

    CHIDWI
    @CHIDWI
    Unity3D Developer
    Чтобы не было даблджампа добавить булевую переменную. Перед прыжком проверяешь в прыжке персонаж или нет. В функции прыжок делаешь её true. И при приземлении через OnCollision например, делаешь её снова false.
    Ответ написан
    Комментировать
  • Дайте совет про создание 3D игр на Unity под Android?

    CHIDWI
    @CHIDWI
    Unity3D Developer
    1. https://catlikecoding.com учите английский.
    2. Книга Unity в действии.
    3. Книга Learning C# by Developing Games with Unity
    4. Unity туториалы.
    Совет... не используйте стандартный шейдер для мобильных приложений. И учите английский. Попробуйте скопировать простую мобильную игру.
    Не нужно сразу делать ААА проэкты.
    А лучше юзайте поиск, таких вопросов миллион.
    Ответ написан
  • Как лучше использовать Destroy?

    CHIDWI
    @CHIDWI
    Unity3D Developer
    Можно их и вовсе не дестроить. Закончились хп, включили анимацию смерти и после неё отключили объект визуально. Отправили данные что объект выключен и через время менеджер снова его включил.
    Ответ написан
    Комментировать
  • Как сделать уничтожение двух объектов по истечению времени на Юнити?

    CHIDWI
    @CHIDWI
    Unity3D Developer
    Если принципиально сделать именно так то нужно понимать что пуля в сцене должна быть только одна иначе этот обьект который "контролирует объекты в воздухе", будет непойми что удалять. Так же для того чтобы столкновение "произошло", на объектах должен быть коллайдер. Я бы посоветовал повесить скрипт непосредственно на пулю или врага и уже в них проверять столкновение, что будет плюсом в плане того, что можно например спавнить пули из префаба с скриптом. Тогда код будет в пуле такой.
    void OnCollisionEnter(Collision col){ 
    	if (col.gameObject.name=="enemy") {
                    Destroy (col.gameObject, 7f); //удаляем врага с !КОТОРЫМ! столкнулись.
    	}
      	Destroy (gameObject, 7f); //удаляем нашу пулю если она в что либо врезалась.
    }
    void Update(){
            Destroy (gameObject, 10f); //удаляем нашу пулю если она никуда не врезалась и улетела в далёкие края.
    }
    Ответ написан
    Комментировать
  • Как проверить активна ли анимация в if?

    CHIDWI
    @CHIDWI
    Unity3D Developer
    Есть еще такой вариант. Если анимация раскидана через аниматор. Я бы посоветовал делать анимации через Int.
    if(animator.GetCurrentAnimatorStateInfo(0).IsName("Jump") &&animator.GetCurrentAnimatorStateInfo(0).normalizedTime>1){
    animator.Play("Idle");
    }
    Ответ написан
    Комментировать
  • Кто поможет с Rigibody и наклоном?

    CHIDWI
    @CHIDWI
    Unity3D Developer
    Возможно маленькая масса или трение обьекта. Код и настройки в студию.
    Ответ написан
    Комментировать