• Как включить отображение костей в 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
    Ответ написан
    Комментировать
  • Почему не могу создать файл 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 а вот след кости уже идут только локальные вращения. Надо смотреть на риг и уже исходя из этого смотреть что стоит записывать.
    Скорее всего будут проблемы с тангентами ключей, что то починится авто и удалением избыточных. Будут примерно те же проблемы что при мокапе , хотя если так подумать это и будет диджитал мокап
    Ответ написан
    Комментировать
  • Как сделать размытие image в юнити как в cs go?

    @DrRen7
    motion blur?
    Это делает через прост процессинг 671521f1c4c92173667192.png
    к примеру такое будет если сменить рендер на URP
    Ответ написан
    Комментировать
  • Как сделать простую дверь в юнити для мобильных устройств и что бы она открывалась и закрывалась по кнопке?

    @DrRen7
    Ну есть функция Debug.log("Ошибка"); так что смотри что после raycast"a не сработало
    примерно должно быть так
    GameObject _screenbuttor; //элемент UI с подсказкой для открытия двери
     LayerMask _doorMask;//маска двери 
     private void Update()
     {
        
         Transform cam = Camera.main.transform; // откуда пускаем луч будет просто камера 
         RaycastHit hitInfo; //информация о попадание луча
         if (Physics.Raycast(cam.position,cam.forward,out hitInfo, 10f,_doorMask)) 
         {
             Debug.Log("hit work"); //проверка что все работает 
             _screenbuttor.SetActive(true); // подсказку активной 
         }
         else
         {
             _screenbuttor.SetActive(false);
         }
    
         if (_screenbuttor.activeSelf && Input.GetKeyDown(KeyCode.E)) //если подсказка активна и нажата кнопка E 
         {
             Debug.Log("Door Interactive"); // проверяем что все сработало 
             hitInfo.collider.GetComponent<Door>().InteractingDoor(); // вызываем метод для работы с дверью
         }

    На двери
    using UnityEngine;
    
    public class Door : MonoBehaviour
    {
        [SerializeField] bool _isOpen; 
       // public bool isOpen=> _isOpen;
    
        public void InteractingDoor()
        {
            Debug.Log("Use Door Interact"); // проверяем что перешли в другой скрипт 
            if (_isOpen) CloseDoor();
            else OpenDoor();
        }
    
        void CloseDoor()
        {
            Debug.Log("Close Door"); //проверяем что включился метод для закрытия двери
            //Ну тут действия для закрытия
        }
        void OpenDoor()
        {
            Debug.Log("Open Door"); //проверяем что включился метод для открытия двери
            //Тут действия для открытия
        }
    }

    Ну и смотри в консоле что не сработало значит там и ошибка, если все работает значит что то не так с методом для открытия двери, проверить анимационный контроллер или как там отрывается
    Ответ написан
  • Как сделать обход препятствий в 2.5d Unity-игре?

    @DrRen7
    как вариант просто один навмешь
    67080aa7b00d2608603939.jpeg
    я вот не знаю как с мостом быть наверно вот там и будет нужен линк
    Ответ написан
  • Как перенести модель с несколькими материалами из блендера в unity?

    @DrRen7
    Если все правильно сделано то нажимаешь на модель и там все есть
    6706b2f8d1f6b508359439.png
    Но лучше будет сделать uv развертку и текстуры а потом создать материал в unity или marmoset toolbag
    Ответ написан
    Комментировать
  • Что делать если префаб врага не находит кординаты игрока?

    @DrRen7
    Префаб не сохранит ссылку на трансформ объекта что не входит в префаб.
    Нужно добавить метод на Transform player
    Добавь в enemy
    public void SetTarget(Transform target)
     {
         player = target;
     }

    В скрипт что будет делать инстанс надо добавить ссылку на игрока
    GameObject newEnemy = Instantiate(_enemy.gameObject);
     newEnemy.GetComponent<Enemy>().SetTarget(_player.transform);

    Ну и так по скрипту пройдись
    Transform player == (Player)pl.gameObject.transform
    Transform enemy ==this.transform == enemyObject.transform

    по сути тебе надо во врага передать ссылку на скрипт игрока потому как есть методы что с ним взаимодействуют а имея скрип можно получить и transform
    Ответ написан
  • Как запретить мобам спауниться друг в друга?

    @DrRen7
    Любой каст из точки спавка делаешь и если он не срабатывает то спавн пустой
    void Spawner(Transform spawnPos)
     {
         RaycastHit[] hits= Physics.SphereCastAll(spawnPos.position, Radius, spawnPos.up, 2f, _enemymask, QueryTriggerInteraction.UseGlobal);
         if (hits.Length > 0) return;
         GameObject enemy = Instantiate(_enemy.gameObject, spawnPos);
     }

    Ну лучом можно будет стрелять если (hits.Length > 0) просто нарисовать LineReneder а через hits можно уничтожить объекты или получить компонент(ну условный heals) и нанести урон
    Ответ написан
    Комментировать
  • Пули в Unity 2D?

    @DrRen7
    В 2д не силен, да и для пуль предпочитаю юзать физиккасты а не rb. Но вот проблемы
    Rigibody лучше не крутить через код, лучше ему переназначить вектор направления.
    Прямоугольный коллайдер будет застревать в лучше взять циркуль
    код примерно такой
    Vector2 _moveDir;
        Rigidbody2D _rb;
        [SerializeField] float _speed=5f;
        bool _blockMoveUpdate;
        void Start()
        {
            _rb = GetComponent<Rigidbody2D>();
            ShootUpdate(transform.right);
        }
    
        private void ShootUpdate(Vector2 newDir)
        {
            _moveDir = newDir.normalized;
            _rb.velocity = _moveDir*_speed;
            if(_blockMoveUpdate)_blockMoveUpdate = false;
        }
    
        private void OnCollisionEnter2D(Collision2D collision)
        {
            if (!_blockMoveUpdate)
            {
                _blockMoveUpdate = true;
                var coll = collision.contacts[0];
                Vector2 newMove = Vector2.Reflect(_rb.velocity.normalized, coll.normal);
                ShootUpdate(newMove);
            }
               
        }

    _blockMoveUpdate тут работать не будет, но можно через FixedUpdate придумать реализацию но надо тестить
    ну и настройки Rb
    66f44c1e85257625307723.png
    интерполяцию какую то точно надо, коллизия думаю у вас и так стоит, ну а основное все в нули
    Ответ написан
  • Как сделать рикошет пуль от Tilemap'a?

    @DrRen7
    надо поиграть с вектором пули и нормалью поверхности, накидал быстрый скрипт как идею но лучше все довести до ума
    Camera _mCam;
       Vector2 _mousePos;
       [SerializeField] ContactFilter2D _filders;
       RaycastHit2D[] _hits;
       LineRenderer _lineRenderer;
       private void Start()
       {
           _mCam=Camera.main;
           _hits=new RaycastHit2D[1];
           _lineRenderer = gameObject.AddComponent<LineRenderer>();
           _lineRenderer.widthMultiplier = 0.2f;
           _lineRenderer.positionCount = 3;
       }
    
       private void Update()
       {
           
           Vector2 mousePos = _mCam.ScreenToWorldPoint(Input.mousePosition);
           if(Physics2D.Linecast(transform.position, mousePos, _filders, _hits)>0)
           {
               _lineRenderer.enabled = true;
               _lineRenderer.SetPosition(0, transform.position);
               _lineRenderer.SetPosition(1, _hits[0].point);
               Vector2 v2= _hits[0].point- (Vector2)transform.position; // делаю вектор направления 
               _lineRenderer.SetPosition(2, v2*_hits[0].normal); // умножаю вектор направления на нормаль
    
           }
           else
           {
               _lineRenderer.enabled = false;
           } 
       }
    Ответ написан
    Комментировать
  • Проблема с юнити 2D?

    @DrRen7
    надо просто изменить интерфейс
    самый просто способ скинуть все в default
    66f1af55cc581601912655.png
    или же открыть все нужные окна в ручную
    Windows -> General(там первый блок точно нужен) они же открываются на ctrl + (1-5)
    должно быть примерно так
    66f1b0b892915907484227.png
    Ответ написан
    Комментировать
  • Как правильно сделать сохранение улучшений для игры?

    @DrRen7
    Ну можно сделать класс на объекте что будет хранить лист с классами для улучшений или же поработать со Scriptable Object.
    Ну а сохранять и загружать через JsonUtility как пример (это вроде для SO, тут идет запись в файл и вытаскивания из файла состояния SO)
    using System.IO;
    ....
    string _name;
    public void SaveState()
    {
        var json = JsonUtility.ToJson(this);
        File.WriteAllText(Application.persistentDataPath + $"{_name}.so",json);
    }
    public void LoadState()
    {
        var json = File.ReadAllText(Application.persistentDataPath + $"{_name}.so");
        JsonUtility.FromJsonOverwrite(json, this);
    }
    Ответ написан
    2 комментария
  • Как переменную string преобразовать в List в C#?

    @DrRen7
    Как по мне, переменных не хватает)
    //public static List listName = new List();
    public static List<char> listName = new List<char>(); //тут можно даж var listName = new List<char>();
    
    //var Array.....
    char[] Array....
    Ответ написан
  • Как исправить подергивание камеры и поворот игрока во время движения?

    @DrRen7
    а зачем тут rb и сс ?)
    подергивание можно убрать правильным порядком вызова, поворот камеры надо вызывать в конце (LateUpdate)
    из проблем тут вызов СС.Move 2 раза
    Ответ написан
    2 комментария