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

    @DrRen7
    hand.rotate = Quaternion.RotateTowards(hand.rotate, target.rotate,speedrotate);

    в данном случаи руки будут вращаться со скорость, что поставите, если надо что б прям какое то время стояли
    то условно можно через коорутиру speedrotate сделать 0 на какое то время
    Ответ написан
    Комментировать
  • Как сделать, чтобы вопросы шли по порядку списка, либо убрать повторения их?

    @DrRen7
    void questionGenerate()
        {
            if (qList.Count > 0)
            {
                randQ = Random.Range(0, qList.Count); //если не нужен рандом это удалить
                crntQ = qList[randQ] as QuestionList;
                qText.text = crntQ.question;
                List<string> answers = new List<string>(crntQ.answers);
                for (int i = 0; i < crntQ.answers.Length; i++)
                {
                    int rand = Random.Range(0, answers.Count);
                    answersText[i].text = answers[rand];
                    answers.RemoveAt(rand);
                                                             
                }
    qList.RemoveAt(qList[randQ]);
                                                  
            }
            else
            {
                Debug.Log("Вы прошли игру");
            }
        }


    смысл в том что надо удалить уже заданный вопрос из листа где лежат все вопросы
    Ответ написан
    Комментировать
  • Почему GameObject null?

    @DrRen7
    shootPF передан со сцены или это пребаб? при запуске гейммода shootPF на месте?
    [SerializeField] GameObject shootPF;
    как вариант для отсечения взаимодействия со стороны от других скриптов
    Ответ написан
  • Почему не работает NavMeshAgent?

    @DrRen7
    nma.SetDestination(player.transform.localPosition);

    А точно нужны локальные координаты? думаю тут просто нужен transform.position
    Ответ написан
    Комментировать
  • Можно ли комбинировать 3Д и 2Д графику в Godot?

    @DrRen7
    ну если ты хочешь взаимодействовать с 3д объектами (коллайдерами) то и персонаж должен иметь логику для работы с 3д объектами, условно тебе добавится еще одна ось для движения как пример Octopath traveler.
    Самое простое что можно сделать это запеч 3д карту в 2д как было resident evil. Есть ещё вариант наложить поверх 3д объекта 2д логику, тут работать очень много и вероятно игрок не всегда будет понимать куда можно идти а куда нет.
    Ответ написан
    4 комментария
  • Как включать сразу несколько эффектов в Cinemachine?

    @DrRen7
    using UnityEngine;
    using Cinemachine;
    
    public class CameraShaker : MonoBehaviour {
    
        public CinemachineVirtualCamera _vCam;
    
        private CinemachineBasicMultiChannelPerlin _vCamNoise;
    
        void Start()
        {
            if (_vCam != null)
                _vCamNoise = _vCam.GetCinemachineComponent<Cinemachine.CinemachineBasicMultiChannelPerlin>();
        }
    
        void Update()
        {
           // _isShake = Input.GetKey(KeyCode.Space);
    
            if (Input.GetKey(KeyCode.Space))
            {
                _vCamNoise.m_AmplitudeGain = 2f;
                _vCamNoise.m_FrequencyGain = 1.2f;
            }
            else
            {
                _vCamNoise.m_AmplitudeGain = 0f;   
            }
        }
    }


    ну соответственно m_AmplitudeGain и m_FrequencyGain это из инспектора

    А все это переключать ну правильный вариант это сделать машину состояний с различными параметрами.
    Вариант попроще просто через свич
    Ответ написан
    Комментировать
  • Юнити, как сказать сцене что при загрузке нужно активировать аниматор и кнопки?

    @DrRen7
    Canvas включился и просто альфа на 0? Как переход в аниматоре сделан если через триггер его надо скинуть, можно попробовать сделать переход из any state через триггер что будет активироваться в Canvas Group при OnEnable()
    Ответ написан
  • Поможет ли видеокарта Tesla P40 24 GB, в таких приложениях как Blender и Unreal Enginie 5?

    @DrRen7
    рендерить будет быстрее из за CUDA ядер если рендер поддерживает, в анреале вряд ли что то изменится.
    Плюс стоит еще подумать о перегревах, это все конечно домыслы и надо тестить но проблема что это амд nvidia
    их вроде как не получится в Sli подключить между собой
    Ответ написан
    7 комментариев
  • Нужно ли результат функции от времени умножать на deltaTime в Unity?

    @DrRen7
    Тут надо на реальном примере посмотреть
    private void Update()
     {
         transform.position = transform.position + transform.forward * 5f * Time.deltaTime;
     }

    без дельтата тайма вообще нет времени в функции возьмем за константу что апдейт вызывается 60 раз(у нас 60фпс)
    S=S+f(t)
    где f(t) = transform.forward * 5f *(1c/60)

    Думаю для теста лучше подойдет Rigidbody, потому как там мы работает с силами(они же ускорения) а как знаем из физики скорость это первообразная от ускорения, там соответственно нет deltaTime(ну если мы работаем с силами)
    Ответ написан
    Комментировать
  • Стоит ли отключать интерполяцию твердого тела, при использовании Cinemashine?

    @DrRen7
    FixedUpdate вызывается раз в 0.02 с (по умолчанию) интерполяция нужна для расчета что будет делать объект между обновлениями её выключение может привести к прохождению через пол/стены при высокой скоростью.
    Варианты: если у врага нет rb зачем перемещать его в FixedUpdate? лучше тогда использовать Update, стоит ещё проверить Time.deltaTime или Time.fixedDeltaTime, про сейчас.
    Обычно камера идет в Late Update, условно что кадр должен отрисоваться после всех движений и выполнения всей логики и физика тут все портит, поэтому тут и нужна интерполяция
    Ответ написан
    Комментировать
  • Не получается настроить камеру в 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, или работать с анимацией
    Далее там есть условные макеты по котором можно учится как все делать и настраивать.
    Вроде даж можно и С# обучится на при мерах из ютини. Но вот это я б точно не советовал, все таки языки надо учить отдельно.
    Ответ написан
    Комментировать
  • Ошибка в Unity error CS0246: The type or namespace name 'DecodeType' could not be found ну а дальше как обычно в скобке?

    @DrRen7
    а DecodeType есть в проекте? если это какая то переменная то надо добавить пространство имен через using
    Ответ написан
    Комментировать
  • Как привязать положение по оси 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 комментария