Задать вопрос
  • Баг в игре на Unity, как исправить?

    @DrRen7
    private void Start()
    {
    anim = GetComponent();
    rb = GetComponent();
    }

    у GetComponent не указан какой компонент нужно получить
    как должно быть
    anim = GetComponent<Animator>();
    https://docs.unity3d.com/ru/current/ScriptReferenc...
    В аниматоре есть триггер takeOf но ресета триггера нет, так что он всегда будет срабатывать после первого выполнения
    чучуть поправил скрипт
    using UnityEngine;
    
    public class PlayerController : MonoBehaviour
    {
        private Rigidbody2D _rb2d;
        [Header("MovemengSetting")]
        [SerializeField] private float _speed=4f;
        [SerializeField] private float _jumpPower = 3f;
        private float _inputX;
        private bool _isGrounded;
        [Header("GroundSetting")]
        [SerializeField] Transform _feetPos;
        [SerializeField] float _checkRad;
        [SerializeField] LayerMask _groundMask;
    
        private Animator _animator;
        private SpriteRenderer _spRend;
        private void Start()
        {
            _rb2d = GetComponent<Rigidbody2D>();
            _animator = GetComponent<Animator>();
            _spRend = GetComponent<SpriteRenderer>();
        }
        private void Update()
        {
            InputRead();
            PlayerFlip();
            AnimatorUpdate();
        }
    
        private void AnimatorUpdate()
        {
            _animator.SetBool("isRunning",_inputX!=0);
            _animator.SetBool("isJumping", _isGrounded);
        }
    
        private void InputRead()
        {
            _inputX = Input.GetAxis("Horizontal");
            if (Input.GetKeyDown(KeyCode.Space)) TryJump();
        }
    
        private void TryJump()
        {
            if (_isGrounded) _rb2d.linearVelocityY=_jumpPower;
        }
    
        void PlayerFlip()
        {
            _spRend.flipX = _inputX < 0;
        }
        private void FixedUpdate()
        {
            _isGrounded=IsGround();
            Movement();
        }
        bool IsGround() => Physics2D.OverlapCircle(_feetPos.position, _checkRad, _groundMask);
        void Movement()
        {
            _rb2d.linearVelocityX = _inputX * _speed;
        }
    #if UNITY_EDITOR
        private void OnDrawGizmos()
        {
            Gizmos.color = Color.red;
            Gizmos.DrawSphere(_feetPos.position, _checkRad);
        }
    #endif
    }

    настройки Rb на всякий случай
    6785a5b77231a289035629.png
    anim.SetTrigger("takeOf"); я не придумал зачем он нужен так что и не использую
    Ответ написан
    2 комментария
  • Почему burst в Unity particle system работает в задержкой?

    @DrRen7
    Проверил на практике в гейммоде нет задержи хотя на сцене есть.
    6782dca526830317825335.png
    private void Update()
    {
        if(Input.GetMouseButtonDown(0))_system.gameObject.SetActive(true);
        if (_system.gameObject.activeSelf) Debug.LogError("Enable");
    }


    Мигание я убрал так
    6782de67ce9a3715260385.png

    Но как по мне muzzle flash не должен быть loop,а значит надо другой подход
    Ответ написан
    2 комментария
  • Почему персонаж не ходит 2д?

    @DrRen7
    rb = GetComponent();  //какой?
    rb = GetComponent<Rigidbody2D>(); // надо

    moveInput = Input.GetAxis("Horizontal");
    считываем инпут в update
    https://docs.unity3d.com/6000.1/Documentation/Scri...
    ну да ещё и старт с маленькой буквы) переписал
    using UnityEngine;
    
    public class PlayerController : MonoBehaviour
    {
        private Rigidbody2D _rb2d;
        [SerializeField] private float _speed=2f;
        private float _inputX;
        private Vector2 _moveDir;
        private void Start()
        {
            _rb2d = GetComponent<Rigidbody2D>();
        }
        private void Update()
        {
            _inputX = Input.GetAxis("Horizontal");
        }
        private void FixedUpdate()
        {
            _moveDir = transform.right * _inputX;
    //_moveDir.y = _rb2d. linearVelocity.y  // падение и прыжек пока выкл 
            _rb2d.linearVelocity= _moveDir*_speed;
        }
    }
    Ответ написан
    Комментировать
  • Почему модификатор bevel не отображается в списке модификаторов, если его применять с помощью комбинации CTRL + b?

    @DrRen7
    CTRL + b это bevel, как инструмент моделирования, его можно применять на определенные ребра. В то время как модификаторы применяются ко всей модели. Инструменты меняют сетку в момент применения ну как экструд , модификаторы можно применить, а можно отменить и любой момент
    Ответ написан
    Комментировать
  • Стоит ли настраивать освещение для 3д модельки персонажа в блендере, если я потом буду использовать его в игровом движке?

    @DrRen7
    Нет, не нужно. В игре будет свой свет, а для получения Ambient Occlusion (карта самозатенений) используется только ресурсы модели.
    Ответ написан
    Комментировать
  • Как исправить ошибку NullReferenceException в Unity, хотя вроде всё есть?

    @DrRen7
    так а где FSM ?
    перед DealDamage уже должен сработать OnStateEnter
    Ответ написан
  • Как экспортировать 3д модель персонажа из blender в gta 5?

    @DrRen7
    Ну нужна скачать аддон, вроде как Sollumz есть для гта.
    В доках вроде есть упоминая о форматах https://docs.sollumz.org/
    Ответ написан
  • Как в блендере найти окно аутлайнера?

    @DrRen7
    6766a5a8e54c4700182336.png
    идешь в любой угол пока курсов не станет прицелом, зажимаешь в вытягиваешь новое окно
    потом жмешь на кнопку и изменяешь окно на что то нужное
    6766a6145f12a508556500.png
    Ответ написан
    Комментировать
  • Как в Unity зафиксировать ориентацию системы частиц относительно глобальных координат?

    @DrRen7
    В partical system делаешь start speed = 0, далее идешь в Velocity Over Lifetime там направление line y и space world
    Так же в partical system есть simulation space это отвечает признана ли частица к месту создания, частица может крутится при Local режиме но всегда будет подниматься вверх
    Ответ написан
    Комментировать
  • Не работает OnCollisionCollider с дочерними объектами в Unity, что делать?

    @DrRen7
    Скинь хоть посмотреть что есть и примерно что там с коллайдерами
    А так по сути ИИ и не должен хоть как то взаимодействовать с оружием, это оружие взаимодействует с ИИ. Те оружие должно находить ИИ (точнее скрипт а лучше интерфейс) и вызывать метод с получением урона.
    Вопрос как получить оружию скрипт с дамагой, можно и через коллизию но тогда стоит проверить что есть все компоненты типа коллайдера в и риджедбоди. Другой вариант это использовать физические касты, тут есть несколько вариантов это использовать 1 каст сферы и сделать ограничение по градусам от лица игрока. Другой вариант это нацепить на оружие касты и вызывать их. Это будет как то так 6752e4882f369424392742.png
    по реализации https://docs.unity3d.com/ru/current/ScriptReferenc... для первого
    для второго https://docs.unity3d.com/ru/current/ScriptReferenc...
    Ответ написан
  • Как сделать так что бы заиграла анимация допустим в специальном месте на карте?

    @DrRen7
    Советую пройти https://learn.unity.com/mission/programming-basics лучше получить хоть какие то фундаментальные знания о коде и движке
    Нужно сделать триггер сделать и какие методы есть все есть тут
    https://docs.unity3d.com/Manual/collider-interacti...

    как пример
    public class Player:MonoBehaviour  //скрипт игрока
    {
        public void Something() //метод в игроке который что то делает 
        {
            
        }
    }

    public class TriggerZone : MonoBehaviour // скрипт на зоне 
    {
        private void OnTriggerEnter(Collider other) // стандартный метод для триггера на вход объекта 
        {
            if(other.TryGetComponent(out Player player)) //проверка что обьект содержит скрипт 
            {
                player.Something(); //вызов метода из скрипта 
            }
        }
    }

    Оно просто так работать не будет, должны быть определенные компоненты такие как коллайдер и Rigidbody, все есть в мануале https://docs.unity3d.com/Manual/collision-section.html
    Ответ написан
  • Почему изменяется спрайт в Unity при переходе на окно game?

    @DrRen7
    scale в game больше 1, вот все и распадается, 3д графика на х3 становится похоже на пс1
    Ответ написан
  • Как включить отображение костей в unity?

    @DrRen7
    Надо скачать ассет Animation Rigging, там есть компонент Bone Renderer
    Закидываешь в трансформ нужные кости и они будут отображаться
    673f4224a2dae912153173.png
    про редактирования не понятно, можно сделать анимацию и Ik или просто изменить трансформ но вот что бы кость отвечала за другую обрасти это надо делать скиннинг и это лучше делать в редакторе графики
    Ответ написан
  • Как в URP игнорировать свет на камере?

    @DrRen7
    6739ee4c30235387577379.png
    6739ee57c7779378270462.png
    ну вероятно можно и совсем без источника света обойтись через шейдеры
    Ответ написан
    3 комментария
  • Как сделать так что бы после анимации был переход в другую сцену?

    @DrRen7
    Ну начнем с простого это переход на другую сцену лучше почитать тут
    using UnityEngine.SceneManagement;
    
    static public class SceneWalker   //как пример что бы не создавать обьект со скриптом 
    {
        static public void SceneChanger(string sceneName,int sceneNumber =-1) // создаем метод перехода по имени или номеру сцены 
        {
            if (sceneNumber>=0) SceneManager.LoadScene(sceneName);
            else SceneManager.LoadScene(sceneName);      
        }
    }

    в первой сцене создаем объект со скриптом

    using UnityEngine;
    
    public class SceneSelect : MonoBehaviour
    {
        void Start()
        {
            Invoke(nameof(LoadNewScene), 2f); // через 2 секунды запуск метода LoadNewScene()
        }
    
        void LoadNewScene()
        {
            Debug.Log("Loding");
            SceneWalker.SceneChanger("Scene2",1);  // обращаетмя к реализации SceneWalker для загрузки новой сцены тут или имя или порядок
        }
    }

    далее надо обязательно добавить сцены в билд
    67367661082c3525607411.png
    ну а если нужно плавное затемнение, то перед LoadNewScene() можно вызвать другой метод который потом вызовет LoadNewScene()
    Ну думаю с переходам с переходом понятен, просто надо почитать документацию. Теперь вопрос как через анимацию запустить LoadNewScene() подхода есть 2
    создаю простую анимацию
    1) модифицируем 2 скрипт
    [SerializeField]GameObject box;   //обьект с анимацией 
        Animator _animator;  // аниматор что содержит анимацию
        void Start()
        {
            _animator = box.GetComponent<Animator>(); // получаем с обьекта компонент 
            float animTime = _animator.GetCurrentAnimatorStateInfo(0).length; // получаем время воспроизведения анимации 
            Invoke(nameof(LoadNewScene), animTime+0.1f); // запускам переход метод перехода на другую сцену через время анимации +0.1 сек 
        }

    2) модифицируем 2 скрипт
    using UnityEngine;
    
    public class SceneSelect : MonoBehaviour
    {
        public void LoadNewScene()
        {
            Debug.Log("Loading");
            SceneWalker.SceneChanger("Scene2",1);
        }
    }

    Прикрепляем его к объекту с анимацией выбираем. Выбираем анимацию и добавляем Event в конец анимации
    673681c5bb905951609807.png
    Ответ написан
    1 комментарий
  • Почему не могу создать файл c# в проекте Unity 6?

    @DrRen7
    67366a583c2f4954732896.png
    Ответ написан
    Комментировать
  • Поддерживает ли Windows 10 анимацию кликов мыши?

    @DrRen7
    Если не ошибаюсь то по умолчанию нет паттерна на анимацию клика, есть условные стили на разные действия(там обычная стрелка или ссылка, текст загрузка и тд). Да и если у вас демонстрация лучше скачать то что будет показывать кнопки, обычно там есть и анимация клика и обводка мыши и тд. Пользовался Keyviz где то год назад, там были клики и кнопки и если не надо то все выключалось
    Ответ написан
    Комментировать
  • Почему не меняются переменные в цикле (С++)?

    @DrRen7
    if (A = 0) {}; тут идет присвоение если надо сравнение то вероятно стоит if (A == 0) {}; )
    Ответ написан
    1 комментарий
  • Unity конфликт функций Move и Velocity?

    @DrRen7
    у вас 2 раза вызывает _characterController.Move
    в Velocity() сделайте расчет float verticalMover(это будет velocity.y)
    private void Movement() ....
    _characterController.Move(move * _speed * Time.deltaTime+transform.up*verticalMover*Time.deltaTime );
    ....
    Ответ написан
    Комментировать
  • Как выполнять определенные действия персонажа в Blender, перенесенные из игрового движка (UE5, Unity)?

    @DrRen7
    Ну чисто теоретически я возьму для примера Unity
    1) надо снизить частоту кадров до 30
    2) по кадрово сохранить положения и вращения всех костей в гейммоде
    3) полученное положение конвертировать в анимейшен курф и создать крип
    4) клип перенести в блендер через fbx exporter

    Проблема в том какую информацию сохранять допустим у нас риг персонажа и там root и нам нужен transform те глобальные rotation и position а вот след кости уже идут только локальные вращения. Надо смотреть на риг и уже исходя из этого смотреть что стоит записывать.
    Скорее всего будут проблемы с тангентами ключей, что то починится авто и удалением избыточных. Будут примерно те же проблемы что при мокапе , хотя если так подумать это и будет диджитал мокап
    Ответ написан
    Комментировать