Задать вопрос
Ответы пользователя по тегу C#
  • Как сделать код для 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; //<-меняем материал коллайдера
    Ответ написан
    Комментировать
  • Почему не работает groundcheck?

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

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

    @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("Вы прошли игру");
            }
        }


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

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

    А точно нужны локальные координаты? думаю тут просто нужен transform.position
    Ответ написан
    Комментировать
  • Не получается настроить камеру в 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
    скрипт на самый верхний объект

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

    @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);

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

    @DrRen7
    Самый правильный вариант изучения юнити это оффсайт https://learn.unity.com/
    Во первых не все кто работают в Unity это программисты, там можно попробовать разные направления мб понравится делать VFX, или работать с анимацией
    Далее там есть условные макеты по котором можно учится как все делать и настраивать.
    Вроде даж можно и С# обучится на при мерах из ютини. Но вот это я б точно не советовал, все таки языки надо учить отдельно.
    Ответ написан
    Комментировать
  • Ошибка в Unity error CS0246: The type or namespace name 'DecodeType' could not be found ну а дальше как обычно в скобке?

    @DrRen7
    а DecodeType есть в проекте? если это какая то переменная то надо добавить пространство имен через using
    Ответ написан
    Комментировать
  • Box collider 2d и полет нормальный?

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

    @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д, плюс материалы надо переставить
    туть
    Ответ написан
    Комментировать
  • Как сделать так чтобы объект шёл рандомно от объекта к объекту?

    @DrRen7
    using System.Collections.Generic;
    using UnityEditor;
    using UnityEngine;
    
    public class Tester : MonoBehaviour
    {
        [SerializeField] List<Transform> _allPoint=new List<Transform>();
        Transform _targetPos;
        [SerializeField] Transform _playerPos;
        [SerializeField] float _playerTargetDis;
        [SerializeField] float _stopDistans;
        [SerializeField] float _speed;
        bool _isToPlayer;
    
        private void Start()
        {
            SetAllPoint();
            _targetPos = SelectRandom();
        }
    
        void SetAllPoint()
        {
            foreach (GameObject t in GameObject.FindGameObjectsWithTag("Point"))
            {
                _allPoint.Add(t.transform);
            }
        }
        Transform SelectRandom()
        {
            int rand = Random.Range(0, (_allPoint.Count));
            Debug.Log(rand);
            return _allPoint[rand];
        }
        private void Update()
        {
            if (_isToPlayer) MoveToPlayer();
            else MoveToPoint();
            
                  
        }
        private void FixedUpdate()
        {
            _isToPlayer = SeePlayer();
        }
        void MoveToPoint()
        {
            transform.position = Vector3.MoveTowards(transform.position, _targetPos.position, _speed * Time.deltaTime); //заменить мб движение по нашмешу
            if(Vector3.Distance(transform.position, _targetPos.position) < _stopDistans) _targetPos = SelectRandom();
        }
       void MoveToPlayer()
        {
            transform.position = Vector3.MoveTowards(transform.position, _playerPos.position, _speed * Time.deltaTime);
        }
    
        bool SeePlayer() //тут это от проекта зависит я сделал от дальности без поля зрения и тд
        {
            if (Vector3.Distance(transform.position, _playerPos.position) > _playerTargetDis) return false;
            return true;
        }
    
    }

    ну это самое простое решение, мало вводных как объект перемещает мб навмешь и тд плюс надо подумать поле зрения и тд
    Ответ написан