Задать вопрос
  • Почему у объекта может импульс применяться неправильно?

    K0TlK
    @K0TlK
    в чём причина?

    В том, что ты физику используешь там, где она не нужна.
  • Как можно сократить код в OnTriggerEnter2D?

    K0TlK
    @K0TlK
    WasTabon, Ты хочешь сделать какой-то интерактивный предмет? Чтобы, когда игрок находится рядом с ним, он мог взаимодействовать с ним? Тогда инпут тебе здесь вообще не нужен. Выделяешь интерфейс с методом Interact, реализуешь его в каком-нибудь абстрактном монобехе, впихиваешь свой код, наследники этого монобеха будут перезаписывать то, что вызывается при взаимодействии.

    Что-то типа этого:


    using UnityEngine;
    
    namespace Interaction
    {
        [RequireComponent(typeof(Collider2D))]
        public abstract class InteractiveItem<TComponent> : MonoBehaviour, IInteractive
        where TComponent : class
        {
            protected TComponent Component { get; private set; }
            
            private void Awake()
            {
                GetComponent<Collider2D>().isTrigger = true;
            }
    
            public void Interact()
            {
                if (Component != null) InteractInternal();
            }
    
            protected abstract void InteractInternal();
    
            private void OnTriggerEnter2D(Collider2D other)
            {
                if (other.TryGetComponent(out TComponent character))
                {
                    Component = character;
                }
            }
    
            private void OnTriggerExit2D(Collider2D other)
            {
                if (other.TryGetComponent(out TComponent character))
                {
                    Component = null;
                }
            }
        }
    }




    А инпут это вообще другое. Человек нажимает кнопку, скрипт, который обрабатывает инпут, говорит, что кнопка нажата, вызывается команда и эта команда уже говорит объекту персонажа попытаться поднять предмет. OnTriggerEnter здесь нужен только лишь, чтобы разрешить зависимость предмета от игрока. Ты либо делаешь это, либо делаешь так, чтобы игрок сам определял с чем он хочет взаимодействовать и раскидываешь все зависимости при инициализации игры.
  • Как можно сократить код в OnTriggerEnter2D?

    K0TlK
    @K0TlK
    Если так сделать, у него все сломается, когда в триггер зайдет объект, у которого есть тэг, а следом за ним объект, у которого этого тэга нет. В его случае лучше вовсе ничего не менять.
  • Как отловить момент клика?

    K0TlK
    @K0TlK
    Input.GetKeyDown(KeyCode.Mouse0) - нажатие.
    Input.GetKeyUp(KeyCode.Mouse0) - отжатие.
    Input.GetKey(KeyCode.Mouse0) - возвращает true, пока удерживаешь кнопку.
    Input.mousePosition - позиция курсора.

    Из твоего вопроса я ничего не понял что тебе нужно.
  • Как решить ошибку CS1061?

    K0TlK
    @K0TlK
    'GameObject' does not contain a definition for 'Tag'


    «GameObject» не содержит определения для «Tag». Дословный перевод гугла. Что здесь непонятного? У типа GameObject нет поля/метода/свойства Tag. Регистр важен.
  • Как правильно сделать приседание на Ctrl?

    K0TlK
    @K0TlK
    Qerriom Magnelius, Различия между FixedUpdate и Update посмотри.
  • Как правильно сделать приседание на Ctrl?

    K0TlK
    @K0TlK
    работает через жопу

    А как должен работать?
    А как работает?
    А что неправильно работает?
  • Как переместить курсор мыши по середине экрана?

    K0TlK
    @K0TlK
    Нужно чтобы он просто перемещался или еще и скрывался?
  • Как объявить в коде TextMeshPro?

    K0TlK
    @K0TlK
    TMP_Text. Неужели гугл так сложен в использовании?
  • Как сделать поворот камеры в unity3D для мобильных устройств с помощью свайпов?

    K0TlK
    @K0TlK
    Желательно скрипт с комментариями.

    За этим тебе на фриланс биржу.

    Отслеживаешь свайп, направление свайпа, и вращаешь камеру в этом направлении.
  • Как можно улучшить код этот прыжка?

    K0TlK
    @K0TlK
    Fjfgs, Ужасное решение. IsJumping делает только то, что проверяет нормаль на нул, делает оно это каждый кадр, что неразумно с точки зрения логики. Если код будешь на гитхабе у себя оставлять как пример проекта или отправлять на ревью, то ревьюер сразу поймет, что что-то здесь не так.
    Я специально его оставил, чтобы сделать скрит по типу состояний игрока

    Не понял что ты хотел сказать. Состояние игрока должно быть инкапсулировано в объекте игрока и не должно быть доступно извне.
    В методе jump() состояние будет обновляться частично, что есть плохо

    А оно и не должно обновляться. У тебя нигде в коде не используется IsJumping, кроме как метода Jump, метод Jump вызывается единоразово, соответственно, ему единожды нужно проверить нормаль в момент, когда метод вызывается. Его не нужно каждый кадр обновлять.
    Я для этого и писал, что нужно перенести всё это в компонент движения, чтобы не дергать какой-то лишний компонент.
  • Как можно улучшить код этот прыжка?

    K0TlK
    @K0TlK
    Fjfgs, Проверка на null не очень хорошая идея. Нормаль представлена в виде вектора, у вектора есть Vector3.zero. Когда нет соприкосновения с землей, нормаль = Vector3.zero.
    StopCoroutine в конце корутины лишнее, она сама завершится.
    ExpiredTime перемести из скоупа класса в скоуп корутины и тебе не нужно будет обнулять его:
    private IEnumerator Jumping()
    {
        Movement.Speed = SpeedWhileJumping;
        var expiredTime = 0f;
        ...
    }


    Апдейт здесь не нужен. Ты вызываешь метод Jump и там уже выполняется проверка: если нормаль != Vector3.zero, то прыгать, соответственно, IsJumping тоже не нужен.

    Кэшировать корутину надо, если тебе нужно прервать ее выполнение до момента, когда она сама завершится.
  • Как в unity сделать поворот персонажа?

    K0TlK
    @K0TlK
    Вадимка))),
    Построение вопроса - это его ошибка,

    Именно, не нужно отвечать на его вопрос, если он непонятен и автор не идет на контакт, чтобы это исправить, я ему картинками показал как код в тэг завернуть, чтобы он отображался нормально, но, по всей видимости, даже это оказалось слишком сложно для него, поэтому в новом вопросе он просто не приложил код. Если он увидит, что здесь отвечают на глупые вопросы, то начнет плодить их еще больше, не потрудившись даже загуглить свой вопрос либо сформулировать его нормально и эта вопросилка превратится в сборник глупых вопросов.
  • Как в unity сделать поворот персонажа?

    K0TlK
    @K0TlK
    Вадимка))), А у него в истории и нет этого вопроса, потому что он удален.) Как твой ответ отвечает на его вопрос? Если тебе недостаточно информации, чтобы ответить, подожди пока он ответит на твой комментарий и отправит свой код. Но ты в ответ пишешь непонятно что. Каким образом он, по-твоему отслеживает в своем коде нажатие лкм? Через монобеховский OnMouseDown?
  • Как в unity сделать поворот персонажа?

    K0TlK
    @K0TlK
    Вадимка))),
    поворот происходит только когда я нажимаю мышкой на область самого персонажа

    Он умеет отслеживать нажатие лкм, как ему поможет твой код?
    Он ничего не говорил про поворот к мыши.

    Он ничего не говорил, но я видел его код в удаленном вопросе, который он задал до этого. Там он отслеживает нажатие лкм так же, как и ты и делает рейкаст. Из-за того, что луч никуда не попадает, когда мышь находится не над коллайдером, у него персонаж никуда не поворачивает.
    Что вопрос, что ответ друг друга стоят. Один не может приложить свой код, другой не может прочитать вопрос.
  • Как в unity сделать поворот персонажа?

    K0TlK
    @K0TlK
    Вадимка))), Ну и что он спрашивает? Как отследить нажатие ЛКМ или же что-то другое?
  • Как в unity сделать поворот персонажа?

    K0TlK
    @K0TlK
    Ты вопрос то хоть прочитай, прежде чем писать свой "ответ".
  • Как в unity сделать поворот персонажа?

    K0TlK
    @K0TlK
    Получить позицию курсора в экранных координатах, получить позицию игрока в экранных координатах, от первого отнять второе = направление, куда нужно повернуть игрока, повернуть игрока.