Задать вопрос
Ответы пользователя по тегу C#
  • Если переносить объект и держать долгое время и скидывать то он падает очень быстро. C# Что делать?

    @DrRen7
    По сути у тебе объект не двигается а просто телепортируется, если нужно что бы падало плавно домножь вектор падения на Time. deltaTime, ну и тогда логика скрипта поменяется потому как падения надо вызывать каждый кадр
    Плюс я что то не понимаю смысл этой реализации)
    Ответ написан
  • Почему в Unity очень низкое качество?

    @DrRen7
    Ну так есть сцена где ничего не работает вы выдается минимальная картинка что бы уменьшить нагрузку, и уже сцена из камеры (Game) и там уже примерно как будет выглядеть игра главное scale не трогать он обычно идет какой то % от вашего максимального.
    6630eb3675934289363681.png

    Да и юнити модульный нужна графика по лучше надо поменять рендер. Не все просто работают с графикой по умолчанию стоит стоковый рендер даж без пост процессинга(ну условно).
    6630eccd79058590022310.png
    Ответ написан
    1 комментарий
  • Instantiate создаёт два объекта в unity 2D C# Что делать?

    @DrRen7
    Скорее всего проблема в настойках Rigidbody, вероятно один объект попадает в другой и получается 2 и более столкновений, это если еще и скрипты правильно размещены, но сути у вас вообще не должно ничего создаваться из за удаления объекта до создания.

    Я поправил написал должно работать , то лучше collision.gameObject.name == plusname заменить на collision.gameObject.tag
    using UnityEngine; 
     
    public class Plus : MonoBehaviour
    {
        public string plusname;
        public GameObject ReadyBall;
        GameObject _colObj;
        bool _IsCol;
    
        private void Update()
        {
            if (_IsCol) Pluser();
        }
    
        void Pluser()
        {
            _colObj.SetActive(false);
            GameObject newObj= Instantiate(ReadyBall, (_colObj.transform.position), Quaternion.identity);
            newObj.transform.name = "CreateBy" + this.transform.name; ///For Debug
            Destroy(_colObj);
            Destroy(this.gameObject);
    
        }
        void OnCollisionEnter2D(Collision2D collision)
        {
            if (collision.gameObject.name == plusname&&!_IsCol)
            {
                _colObj = collision.gameObject;
                _IsCol = true;
            }
        }
    }
    Ответ написан
    Комментировать
  • Как сделать так чтобы при запуске сцены счётчик очков обнулялся?

    @DrRen7
    void Start() //добавляем в старт что бы все отнулялость при запуске сцены
     {
         SetScoreZero();
     }
    
     public void SetScoreZero()
     {
         MyScore = 0;      //MyScore - это переменная где хранятся очки
     }

    добавляем на кнопку
    662c0371db76a208159214.png
    Ответ написан
  • Как правильно настроить считывание клавиш?

    @DrRen7
    Тут больше надо работать с аниматором. Про состояния а зачем их столько? Чем бег, ходьба и айдл отличаются друг от друга?
    Я б оставил только 3 состояния OnGround, OnAir, Crouch это я б единственное, что оставил в Bool в аниматоре. Атаку можно передать как триггер, ну а движение это флот.
    И да все инпуты должны быть в Update
    Ответ написан
  • Отклик при соприкосновении с коллайдером 2D?

    @DrRen7
    using UnityEngine;
    public class Player2dTest : MonoBehaviour
    {
        [SerializeField] Transform _wallLeft;
        [SerializeField] Transform _wallRight;
        Vector3 _targetTransf;
        [SerializeField] float _speed = 5f;
        Collider2D _myCol;
        bool _isMove = true;
        [SerializeField]bool _isWin;
        private void Start()
        {
            _myCol= GetComponent<Collider2D>();
            _targetTransf = _wallLeft.position;
        }
        private void Update()
        {
            if (_isMove)
            {
                _myCol.transform.position = Vector2.MoveTowards(_myCol.transform.position, _targetTransf, _speed * Time.deltaTime);
                if (_myCol.transform.position == _targetTransf) NewTargetMove();
            }
            if (Input.GetKeyDown(KeyCode.Space))
            {
                EndGame();
            }
        }
        void NewTargetMove()
        {
            if (_targetTransf != _wallRight.position) _targetTransf = _wallRight.position;
            else _targetTransf = _wallLeft.position;
        }
        void EndGame()
        {
            _isMove = false;
            if (_isWin) Debug.Log("You Win");
            else Debug.Log("You Lose");
    
        }
        private void OnTriggerEnter2D(Collider2D collision)
        {
            if (collision.tag=="FirstPart") _isWin = true;
        }
        private void OnTriggerExit2D(Collider2D collision)
        {
            if(_isWin)_isWin = false;
        }
    }

    Фото сцены и "бегающего объекта" 66284bf469039539456906.png

    можно заменить триггеры на boxcast в EndGame()
    Ответ написан
  • Почему коллайдеры деревьев на террайне съезжают?

    @DrRen7
    хмм интересно.
    1)Попробуй создать префабу родительский объект
    2)Присвоить террейну и деверьям разные LayerMask и убрать взаимодействия друг с другом.
    66282b6e7889d145251307.png
    как пример
    Ответ написан