Задать вопрос
  • Как лучше хранить и доставать ресурсы в unity?

    @DrRen7
    Varhelm,
    А понял тебе просто надо распаковать scriptableObject в gameObject щас подумаю с 2д я особо не знаком щас что нить попробуй по быстрому накидать

    using UnityEngine;
    
    public class Item : ScriptableObject
    {
        public enum ObjType
        {
            HeavyArmor, LightArmor, Swords, Stuffs
        }
        public int _id;
        public string _name;
        public ObjType _Objtype;
        public Sprite[] _sprites;
        public Sprite icon;
    
    
        public virtual void ReOpenItem(Transform pos)
        {
    
            GameObject openObj =new GameObject();
            openObj.transform.position = pos.position;
            openObj.transform.name = _name;
            for (int i=0; i< _sprites.Length; i++)
            {
                GameObject sonObj = new GameObject();
                sonObj.transform.SetParent(openObj.transform);
                sonObj.transform.localPosition = Vector2.zero; //?
                sonObj.AddComponent<SpriteRenderer>().sprite = _sprites[i];
                sonObj.transform.name = "Sprite " + (i + 1);
            }
    
        }
    }

    Ну сейчас по идеи объект должен открыться в том месте где укажешь, для оптимизации можно сделать что объект создается 1 раз а потом просто меняют имя и спрайты если надо то делает ещё дочерние объекты или их удаляет
  • NullReferenceException: Object reference not set to an instance of an object?

    @DrRen7
    ian77, Текст это просто компонент как коллайдер и прочее создаешь пустой объект и добавляешь компонент текст
    662e330ebdae6672962592.png
  • NullReferenceException: Object reference not set to an instance of an object?

    @DrRen7
    ian77, Попробуй юзать просто текст а не TextMeshPro только для него надо подключить
    using UnityEngine;
    using UnityEngine.UI;
     
    public class Plus : MonoBehaviour
    {
        Text _text;
    
    
        private void OnEnable()
        {
            _text = GetComponent<Text>();
        }
    
        private void Start()
        {
            
            _text.text = "Testing";
        }
    
    
    }


    Плюс проверь нет ли это скрипта ещё где то а то пишет что ошибка в GetComponent
  • Instantiate создаёт два объекта в unity 2D C# Что делать?

    @DrRen7
    Данный скрипт случаем не находится на двух объектах которые сталкиваются? И или на объекте который создается?
  • Как сделать так чтобы при запуске сцены счётчик очков обнулялся?

    @DrRen7
    Ost234, Добавить в скрипт
    private void Awake()
     {
         DontDestroyOnLoad(this.gameObject);
     }

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

    @DrRen7
    caramel2312, 662bf022babab255004650.png
    Ну вот в mover можно сделать так переходы осуществляются через MovePower по сути что и есть скорость
    using UnityEngine;
    
    public class Mover : MonoBehaviour
    {
        Rigidbody _rb;
        float _currentSpeed;
        [SerializeField] float _walkSpeed=5f;
        [SerializeField] float _runSpeed=7f;
        [SerializeField] float _sprintSpeed=10f;
    
        Vector2 _inputVec2;
        Vector3 _moveVecto3;
        bool _sprint;
        bool _superStrint;
        bool _lastUpdateSuperPos;
        float _currentSuperSprintTime;
        float _superSprimtTime = 1f;
        Animator _anim;
        private void Start()
        {
            _rb = GetComponent<Rigidbody>();
            _anim = GetComponent<Animator>();
        }
    
        private void Update()
        {
            InputRead();
            SpeedControll();
            AnimUpdate();
        }
        void InputRead()
        {
            _sprint=Input.GetKey(KeyCode.LeftShift);
            _superStrint =Input.GetKey(KeyCode.LeftAlt);
            if (_superStrint && !_lastUpdateSuperPos) _currentSuperSprintTime = _superSprimtTime;
            _inputVec2.Set(Input.GetAxis("Horizontal"),Input.GetAxis("Vertical"));
            _lastUpdateSuperPos = _superStrint;
    
    
        }
        void AnimUpdate()
        {
            _anim.SetFloat("MoveFront",_inputVec2.x);
            _anim.SetFloat("MoveSIde", _inputVec2.y);
            if (IsMove())
            {
                if (_inputVec2.sqrMagnitude > 1f) _inputVec2.Normalize();
            }
            _anim.SetFloat("MovePower", _currentSpeed);
        }
    
        void SpeedControll()
        {
            _currentSpeed = _sprint ? _sprintSpeed : _walkSpeed;
            if (_superStrint && !(_currentSuperSprintTime > 0))
            {
                _currentSpeed = _sprintSpeed;
                _currentSuperSprintTime -= Time.deltaTime;
            }
            
        }
        private void FixedUpdate()
        {
            _moveVecto3.Set(_inputVec2.x, 0, _inputVec2.y);
            _rb.MovePosition(_rb.position+_moveVecto3 * Time.fixedDeltaTime * _currentSpeed);
        }
    
        bool IsMove()
        {
            return _inputVec2.sqrMagnitude != 0;
        }
    }

    это код для состояния на земле, если чучуть поиграться то можно допилить для остальных, ну для приседания по сути ничего менять не надо только сделать ограничение на скорость ну и измение размера коллайдера туда и обратно. С падением все интересней надо проверку на землю и изменить код для движения
  • Почему текстуры с blockbench в unity ломаются?

    @DrRen7
    Попробовал в URP все нормально. 662bccae8e2b8753037313.png
    Как вариант попробуй сделать текстуру квадратной
  • Как правильно настроить считывание клавиш?

    @DrRen7
    662ba3d433235568232638.png
    Вот как то там лучше сделать
    MoveFront, MoveSIde - это координаты вектора движения для 2D смешивания
    MoveFall - это rb.velocity.y если падение и набор высоты разные движения, мб надо для анимации приземления с большей высоты
    MovePower - скорость движения, для перехода идла, ходьбы и бега
    IsGround - переход между воздухом и землей
    IsCrouch - переход между состоянием присядя и в полный рост
    Attack - атака, можно использовать и bool

    ну это как бы сделал я. А так надо сидеть и думать о прерывания и как смешивать. Условно бег и ходьбу можно в 1 смешивание запихнуть, грубо говоря как на геймпад чуть отклонение ходьба полное бег а кнопка еще и спринт
  • Почему выводится type mismatch при загрузке файла анимации в юнити?

    @DrRen7
    MAX_x, анимация и аниматор это разные компоненты. Грубо говоря аниматор это контроллер который воспроизводит определенную анимацию и его надо настраивать
    6627e5a15ffc4348554937.png
  • Почему выводится type mismatch при загрузке файла анимации в юнити?

    @DrRen7
    сделай скрин из инспектора. И ты анимируешь камеру?
  • Некорректное объединение объектов, как исправить?

    @DrRen7
    LinaApenko,
    можно проверить 66267944c8e10780827150.png
    потом выбрать face ALt+N->Flip
    хотя обычно розовый цвет это потеря текстур, надо удалить старый и назначить новый.И да если потом это идет в игровой движок то лучше все превратить в треугольники (ctrl + t)
  • Как сделать переход на другую сцену при подборе 15 предметов на юнити?

    @DrRen7
    Да. Item должны иметь коллайдеры в режиме триггер и rigidbody c IsKineMatic

    сделал ассет что б понятней было https://disk.yandex.ru/d/hfLevbu4APkGMA