Задать вопрос
Ответы пользователя по тегу Unity
  • Не получается настроить камеру в Unity, где мне нужно изменить код?

    @DrRen7
    using UnityEngine;
    
    
    public class CamHolder : MonoBehaviour
    {
        [Header("TargetObj")]
        [SerializeField] Rigidbody carPhysics;
        [Header("CamSettings")]
        [SerializeField] Transform _сamHolder;
        [SerializeField] float _camSpeedRotate=1f;
        [SerializeField] bool _rotateMode;
        [SerializeField] float _speedToDefault = 360f;
        [SerializeField] float _timerToSetDefoult=1f;
        float _currentTimerToSet;
    
        float mouseX, mouseY;
    
        float _camYaw;
        float _camPitch;
    
    
        const float k_bottomClamp=-90f;
        const float k_topClamp = 90f;
    
        private void Update()
        {
            GetMouseInput();
        }
    
        void GetMouseInput()
        {
            mouseX = Input.GetAxis("Mouse X");
            mouseY = Input.GetAxis("Mouse Y");
            if (Input.GetMouseButton(1))
            {
                Debug.Log("Test");
                _rotateMode=true;
                _currentTimerToSet = _timerToSetDefoult;
            }
            if (_rotateMode)
            {
                _currentTimerToSet -= Time.deltaTime;
                if(!(_currentTimerToSet>0))_rotateMode = false;
            }
        }
        private void FixedUpdate()
        {
            transform.position = carPhysics.transform.position;
            transform.rotation = carPhysics.transform.rotation;
        }
        private void LateUpdate()
        {
            CameraRotation();
        }
    
        private void CameraRotation()
        {
            if (_rotateMode)
            {
                _camYaw += mouseX * _camSpeedRotate;
                _camPitch -= mouseY * _camSpeedRotate;
                _camYaw = Clamper(_camYaw, float.MinValue, float.MaxValue);
                _camPitch = Clamper(_camPitch, k_bottomClamp, k_topClamp);
                _сamHolder.transform.rotation = Quaternion.Euler(_camPitch,
                    _camYaw, 0.0f);
            }
            else
            {
                _сamHolder.transform.localRotation = Quaternion.RotateTowards(_сamHolder.transform.localRotation,Quaternion.Euler(Vector3.zero),_speedToDefault*Time.deltaTime);
            }
        }
    
        float Clamper(float curAngle,float clampMin,float clampMax)
        {
            if (curAngle < -360f) curAngle += 360f;
            if (curAngle > 360f) curAngle -= 360f;
            return Mathf.Clamp(curAngle, clampMin, clampMax);
        }
    }

    665e0921d2dcc917802879.png
    скрипт на самый верхний объект

    надо еще поправить что б при включении камеры брался настоящий трансформ с камеры а то она прыгать будет, плюс если будет дергаться надо менять порядок вызова
    Ответ написан
    Комментировать
  • Как использовать Global Volume только для одного слоя Unity urp 2d?

    @DrRen7
    Не совсем уверен что то
    Присваиваешь объекту с компонентом Volume слой
    потом идешь в настройки камеры environment=> Volume mask и выбираешь слой с пп
    Ответ написан
    Комментировать
  • Почему Не работает код на респавн еды?

    @DrRen7
    [SerializeField] BoxCollider2D SpawnArea;
      private void Randomposition()
      {
          Bounds bounds = SpawnArea.bounds;
          float x =SpawnArea.transform.position.x+ Random.Range(bounds.min.x, bounds.max.x);
          float y = SpawnArea.transform.position.y+Random.Range(bounds.min.y, bounds.max.y); 
          //перед изменением надо проверить на наличие змейки в точке
          // не уверен что сработает , без должно тож работать
          Vector3 newpos=  new Vector3(Mathf.Round(x) + 0.5f, Mathf.Round(y) + 0.5f, -1f); //0.5 из за того что объект равен 1,1
          if (IsGetSnake(newpos))
          {
              Randomposition();
              return;
          }
          transform.position = newpos; 
      }
    
      bool IsGetSnake(Vector3 pos)
      {
          bool shake = false;
          if (Physics.Raycast(pos + Vector3.forward, -Vector3.forward, out RaycastHit hit)) 
          {
              if (hit.transform.tag == "snake")
              {
                  shake = true;
              }
          }
          return shake;
      }
    
      private void Start()
      {
          Randomposition();
      }
      private void OnTriggerEnter2D(Collider2D other)
      {
          if (other.tag == "snake")
          {
              Randomposition();
          }
      }
    Ответ написан
    5 комментариев
  • Не проигрывается Rigidbody .velocity?

    @DrRen7
    ну _playerRb.position.y получается ты умножаешь положение на силу и если игрок стоит в 0 то силы не будет и наоборот если стоит высоко то будет прыгать сильно
    да и лучше использовать addforce
    _playerRb.AddForce(_playerRb.transform.up * jumpHeight,ForceMode2D.Impulse);

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

    @DrRen7
    ну вариантов много ну самый простой
    это сделать игрока DontDestroyOnLoad, а при срабатывании сценария смены сцены( SceneManager.LoadScene("___"); ) задать игроку нужный Transform, вероятно может быть проблема с физикой если она, тогда надо сделать чек на загрузку сцены и менять трансформ уже после загрузки
    Ответ написан
    Комментировать
  • Какой ресурс более качественный, для изучения языка c#?

    @DrRen7
    Самый правильный вариант изучения юнити это оффсайт https://learn.unity.com/
    Во первых не все кто работают в Unity это программисты, там можно попробовать разные направления мб понравится делать VFX, или работать с анимацией
    Далее там есть условные макеты по котором можно учится как все делать и настраивать.
    Вроде даж можно и С# обучится на при мерах из ютини. Но вот это я б точно не советовал, все таки языки надо учить отдельно.
    Ответ написан
    Комментировать
  • Как привязать положение по оси Y одного объекта к положению по оси Y другого объекта?

    @DrRen7
    [SerializeField] GameObject _gO1;
       [SerializeField] GameObject _gO2;
    
       private void Update()
       {
           GameOBJ1Rotator();     
       }
       private void LateUpdate()
       {
           _gO2.transform.rotation = Quaternion.Euler(0, GetAngle(), 0); //задаем
           Debug.Log("GO1 :" + _gO1.transform.eulerAngles.y + " GO2 :" + _gO2.transform.eulerAngles.y); // дебаг для вращения
       }
       void GameOBJ1Rotator() ///это не надо просто для наглядности, как сломать вращение
       {
           _gO1.transform.rotation *= Quaternion.Euler(Vector3.one*90f*Time.deltaTime);
       }
       float GetAngle() //получаем градусы таргет объекта
       {
           float angle = _gO1.transform.rotation.eulerAngles.y;
           return angle;
       }

    Я тут специально сделал баг с захлопыванием элеров из за вращения тагрет объект по 3м осям сразу. В реальным примерах такое получить сложно, просто для наглядности и почему вращения задают кватернионами а не градусами.
    Ответ написан
    Комментировать
  • Как ограничить поворот по оси X?

    @DrRen7
    При считывании мыши не надо домножать на дельту, там и так идет дельта от предыдущий позиции. Не совсем понял что вам тут нужно, по коду ограничить поворот 310-50
    [SerializeField] float rotationSpeed = 360f;
        [SerializeField] float _inputPower=5f;
        float _inputY;
    
        private void Update()
        {
            _inputY -= Input.GetAxis("Mouse Y") * _inputPower;
            _inputY = Mathf.Clamp(_inputY, -50f, 50f);
            transform.rotation = Quaternion.RotateTowards(transform.rotation, Quaternion.Euler(Vector3.up * _inputY), rotationSpeed * Time.deltaTime);
        }

    если с осью поворота не угадал то Vector3.up изменить на другую
    Ответ написан
    1 комментарий
  • Box collider 2d и полет нормальный?

    @DrRen7
    Проверь physics material в коллайдерах.
    Плюс ещё можно проверить гравитацию 665334a790f15972754899.png
    Ответ написан
    4 комментария
  • Как в unity повернуть материал в probuilder?

    @DrRen7
    В Probuilder есть UV редактор поверни на 90 градусов нужные шелфы
    Ответ написан
    Комментировать
  • Как сделать так, чтобы после проверки If в Update действие выполнялось 1 раз?

    @DrRen7
    думаю проще игрока перевернуть , потому как там скорее всего ещё должны быть трансформы из которых пули летят и тд
    float _inputX;
        float _inputLastInput=1;
        private void Update()
        {
            _inputX = Input.GetAxisRaw("Horizontal");
            Mover();
        }
    
        private void Mover()
        {
            if (_inputX == 0) return;
            if (_inputLastInput != _inputX) RotObj();
            transform.position+=transform.right*Time.deltaTime;
        }
        void RotObj()
        {
            _inputLastInput *= -1;
            float angle = 180;
            if (_inputLastInput == 1) angle = 0;
            transform.rotation = Quaternion.Euler(0,angle,0);
        }
    Ответ написан
    Комментировать
  • Множество Rigidbody ИНОГДА проваливается под пол, как исправить?

    @DrRen7
    Ну если проблема появляется на телефоне , логично что проблема с плохой оптимизацией.
    Как вариант можно поиграть с настройками Rigidbody, а точнее с Interpolate и Collision Detection, тогда объекты должны не проваливаться. Стоит написать фпс чекер и посмотреть нет ли паденийfloat fps=1/Time.deltaTime;
    Ответ написан
  • Как построить стены в 2D игре чтоб персонаж не мог через них проходить?

    @DrRen7
    в 2 не силен, а разве у перса не должно быть коллайдера? как бы коллайдеры не дают проходить объекам друг через друга
    Ответ написан
    Комментировать
  • Как решить ситуацию в коде?

    @DrRen7
    using UnityEngine;
    
    public class ParentUsing : MonoBehaviour
    {
    
        GameObject _targetGO;
        bool UIVision;
    
    
        void Update()
        {
    
            if (Input.GetKeyDown(KeyCode.E) && _targetGO != null)
            {
                ParentSet(_targetGO);
            }
        }
    
        void ParentSet(GameObject newParentCursor)
        {
            gameObject.transform.parent = newParentCursor.transform;
        }
    
        void OnTriggerEnter(Collider other)
        {
            if (other.tag == "Cursor")
            {
                UIVision = true;
                _targetGO= other.gameObject;
            }
        }
        private void OnTriggerExit(Collider other)
        {
            if(_targetGO==other.gameObject)_targetGO = null;
        }
    
    }
    Ответ написан
    Комментировать
  • Почему персонаж идёт некоторое после отжатия кнопки?

    @DrRen7
    Ну как из 1 проблем у тебя контроллер.Move используется дважды, плюс лучше использовать в апдейте это не rb
    controller.Move(_walkDirection.normalized * (_speedWalk * Time.deltaTime) +
                                 new Vector3(0.0f, _verticalVelocity, 0.0f) * Time.deltaTime);

    как то так будет
    Ответ написан
    Комментировать
  • Как написать скрипт Unity 2d для машины?

    @DrRen7
    Времени сейчас расписывать нету. Сделал ассет, но он в 3д, плюс материалы надо переставить
    туть
    Ответ написан
    Комментировать
  • Как решить ошибку build в unity?

    @DrRen7
    Проверь что все нужные SDK стоят и актуальны в UnityHub. Далее в самом юнити зайти и проверь, что в Edit -> Preferences -> External Tools стоят галки у рекомендованных.
    6641ff1d53c34679543579.png

    Если ошибка не пропадет там проблема с SDK (с версиями и путями), я напишу как поправить если проблема останется
    Ответ написан
    9 комментариев
  • Почему зомби (NavMesh) стоят некоторое время а потом идут к цели?

    @DrRen7
    Думаю проблема, что агенты друг другу мешают.
    using UnityEngine;
    using UnityEngine.AI;
    
    public class DebugAI : MonoBehaviour
    {
        NavMeshAgent _agent;
        void Start()
        {
            _agent = GetComponent<NavMeshAgent>();
           
        }
        private void OnDrawGizmos()
        {
            NavMeshPath path = _agent.path;
            Vector3 nowpoint = transform.position;
            foreach (Vector3 point in path.corners)
            {
                Gizmos.color = Color.yellow;
                Gizmos.DrawSphere(point, 0.15f);
                Gizmos.color= Color.green;
                Gizmos.DrawLine(nowpoint, point);
                nowpoint = point;
            }
        }
    }

    Накинь скрипт и посмотри что там с путем агента.
    Если пути нету то проблема с порядком выполнения кода
    Ответ написан
  • Существует ли технология декларативной генерации модели здания?

    @DrRen7
    Возможно и есть. точно есть генераторы городов, но они совмещают уже созданную геометрию.
    А так есть нейронки что из изображений делают 3д модели или проги что создают точную модель из фоток со всех сторон. Но тут тож не все так просто, смотря для чего потом использовать, потому как сетка у модели будет не очень
    Ответ написан
  • Как сделать камеру которая не видит объект но видит тень этого объекта?

    @DrRen7
    1) Компонент mesh Renderer => Cast Shadows => Shadows only и получается что ты рендеришь только тени.
    У камеры есть Culling Mask там можно выбрать какие слои будут рендерится.
    Ну условно тебе надо что б одна камера рендерила, а другая нет. Создаешь объект делаешь еду точно такой же дочерний просто кидаешь их на разные слои.
    2) Ну или написать шейдер, но я тут не подскажу)
    Ответ написан
    Комментировать