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

    @DrRen7
    Надо просто создать переменную где будет хранится значение для каждой кнопки а после нажатия определенной кнопки и совершения определенных действий с переменными должна вызваться функция с присвоениемние переменной к кнопки.
    как пример
    using UnityEngine;
    using UnityEngine.UI;
    
    public class Calk : MonoBehaviour
    {
        float num1;
        float num2;
        Text button1;
        Text button2;
    
        void TextButtonLableUpdate()
        {
            button1.text = num1.ToString();
            button2.text = num2.ToString();
        }
        public void MinAndSum()
        {
            float a = num1 + num2;
            num2 -= num1;
            num1 = a;
            TextButtonLableUpdate();
    
        }
    
    }
    Ответ написан
    Комментировать
  • Как сделать чтобы платформа ждала в конечной и стартовой точке заданное время?

    @DrRen7
    using System.Collections;
    using UnityEngine;
    
    public class JumpPad : MonoBehaviour
    {
        [SerializeField]GameObject _platform;
        [SerializeField] float _platformSpeed;
        bool _canMove;
        [SerializeField] float _timeToMove;
        [SerializeField]Vector3 _nextPos;
        private void Update()
        {
            if (_canMove) MovePlatform(_nextPos);
        }
        public void SetGo()
        {
            StartCoroutine(SetGoCor());
        }
        IEnumerator SetGoCor()
        {
                                                                      //тут можно сменить таргет примерно что у тебя есть 
    ///if(platform.transform.position == startPoint.position) _targetPos=endPoint.position;
    //else _targetPos=startPoint.position;
            yield return new WaitForSeconds(_timeToMove);
            _canMove=true; 
        }
    
        void MovePlatform(Vector3 targetPos)
        {
            if (_platform.transform.position != targetPos)
            {
                _platform.transform.position = Vector3.MoveTowards(_platform.transform.position, targetPos, _platformSpeed * Time.deltaTime);
            }
            else {
    _canMove = false;
    SetGo();
    }
        }
    
    }


    есть ещё команда Invoke которая запускает метод через определенное время но в ней есть проблема с тем что ты передаешь имя метода через string что может потом привести в ошибке если что то будет переделываться
    Ответ написан
  • Не пойму что не так, Time.deltaTime вычетается всего один раз, хотя должно каждый кадр что делать?

    @DrRen7
    ты постоянно желаешь это delay - Time.deltaTime; (5-Time.deltaTime;)
    void Start
    {
    timer=delay;
    }
    void FixedUpdate()
        {
    
            if(startTimer)
    {
                timer = timer - Time.fixedDeltaTime;
    if(timer <=0)
    {
    startTimer =false;
    timer=delay;
    }
           }
               
        }
    Ответ написан
  • Что делать если персонаж двигается влево после добавления скрипта на врага?

    @DrRen7
    else if (Vector2.Distance(transform.position, player.position) < stoppingdistance && (Vector2.Distance(transform.position, player.position) > retreatDistance))
            {
                transform.position = this.transform.position;
            }

    это не нужно transform.position = this.transform.position; не имеет смысл
    else if (Vector2.Distance(transform.position, player.position) < retreatDistance)
            {
                transform.position = Vector2.MoveTowards(transform.position, player.position, -speed * Time.deltaTime);
            }

    проблема скорее всего тут, вероятно лучше не скорость умножать на минус 1 а таргет позишен

    float dist=Vector2.Distance(transform.position,player.position);
    if(dist>stoppingdistance)transform.position = Vector2.MoveTowards(transform.position, player.position, speed * Time.deltaTime);
    else if(dist<retreatDistance) transform.position = Vector2.MoveTowards(transform.position, player.position*-Vector2.one, speed * Time.deltaTime); //тут надо смотреть на игра сбоку или вид с верху

    а ну и конечно stoppingdistance>retreatDistance
    а и да если этот скрип есть на персонаже то персонаж будет сам от себя убегать
    Ответ написан
    Комментировать
  • При прикосновении игрока к вертикальному обьекту и движению в его сторону игрок зависает рядом со стеной в Unity2D?

    @DrRen7
    Это проблема с Rigidbody решить довольно просто когда игрок в воздухе необходимо назначить другой PhysicsMaterial, условно получается из за терния и приложенной силы игрок просто будет зависать на месте. Сейчас точно настойки для материала не подскажу вероятно все должно быть на 0, был проект для это пришлось реализовать как найду дополню ответ
    Upd
    66a2ef3254220915395225.png
    public PhysicMaterial _defaultMaterial; // стандартный материал
      public PhysicMaterial _materialWhenJumping; //матетериал для воздуха
    
    CharacterCollider = GetComponent<Collider>(); //получаем коллайдер перса 
    CharacterCollider.material = _defaultMaterial; //<-меняем материал коллайдера
    Ответ написан
    Комментировать
  • Как на движке Unity в игре про поезд установить трение на рельсы?

    @DrRen7
    Тут ещё смотря как ты поезд передвигаешь, если используешь физику но правильно будет назначить на коллайдер Physics Material там как раз есть Dynamic Friction - трение при движении и Static Friction - трение положения покоя
    Ответ написан
    Комментировать
  • Как решить проблемы с размером модели после блендера в юнити?

    @DrRen7
    Размер можно выбрать в юнити при импорте модели
    669ceb498e598059777987.png
    Scale Factor то что нужно изменить, ну и соответственно из этого ещё можно увидеть что 1 см из блендера будет равен 1 м в юнити, так что другой вариант это изменение единиц измерение при экспорте
    Ответ написан
    Комментировать
  • Как вернуть предмет на своё место в Unity 3d?

    @DrRen7
    Vector3 _startPos;
     void Awake()
     {
         _startPos=transform.position;
     }
     void OnEnable()
     {
         transform.position= _startPos;
     }
    Ответ написан
    Комментировать
  • Почему не работает groundcheck?

    @DrRen7
    в 3д обычно использую Physics.CheckSphere каждый кадр думаю для 2д есть какой то аналог.
    Вероятно если добавить Rb на землю ошибка пропадет
    Ответ написан
    Комментировать
  • Как с помощью тэга назначить public Text -----; в unity C#?

    @DrRen7
    Text это компонент а через FindWithTag можно получить GO.
    moneytext = GameObject.FindWithTag("moneyText").GetComponent<Text>();
    Ответ написан
    Комментировать
  • Как реализовать изменение цветовой схемы (типа светлая/темная тема) в приложении, написанном на Unity?

    @DrRen7
    using System.Collections.Generic;
    using UnityEngine;
    using UnityEngine.UI;
    using TMPro;
    
    public class MenuColor : MonoBehaviour
    {
        [SerializeField] Image _backGround; //Добавляем фон в инспекторе
        [SerializeField] List<Button> _buttons; //добавляем кнопки в инспекторе
        private void Start()
        {
            DarkMode();
        }
        public void DarkMode()
        {
            _backGround.color = Color.black;                                           // Меняет цвет бекграунда
            for(int i=0;i<_buttons.Count;i++) 
            {
                _buttons[i].GetComponent<Image>().color = Color.white;                          // обводка кнопки 
                _buttons[i].transform.GetChild(0).GetComponent<Image>().color = Color.black;    //цвет кнопки 
                TextMeshProUGUI text = _buttons[i].transform.GetChild(1).GetComponent<TextMeshProUGUI>();//цвет шрифта кнопки
               text.color = Color.white;
                text.faceColor=Color.white;
            
            }
        }
        public void WhiteMode()
        {
            _backGround.color = Color.white;
            for (int i = 0; i < _buttons.Count; i++)
            {
                _buttons[i].GetComponent<Image>().color = Color.black;
                _buttons[i].transform.GetChild(0).GetComponent<Image>().color = Color.white;
                TextMeshProUGUI text = _buttons[i].transform.GetChild(1).GetComponent<TextMeshProUGUI>();
                text.color = Color.black;
                text.faceColor = Color.black;
            }
        }
    }

    Кнопка (родительский объект стандартная кнопка, 1 изображение чучуть меньше кнопки 2 дочерний текст )
    66857e14a77e3957747932.png
    Итого
    66857f375f7a3004009123.png

    цвет можно задавать через числа new Color32(255,0,0,255)(это красный) rgb и альфа
    Ответ написан
    Комментировать
  • Как сделать так чтобы руки следовали за камерой не сразу а с задержкой?

    @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
    Ответ написан
    Комментировать
  • Как включать сразу несколько эффектов в 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()
    Ответ написан
  • Нужно ли результат функции от времени умножать на 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
    скрипт на самый верхний объект

    надо еще поправить что б при включении камеры брался настоящий трансформ с камеры а то она прыгать будет, плюс если будет дергаться надо менять порядок вызова
    Ответ написан
    Комментировать