Ответы пользователя по тегу C#
  • Unity(C#) - Почему пуля не уничтожается при касании коллайдера?

    MrMureno
    @MrMureno Куратор тега Unity
    VR for all
    а в иерархии в сцене покажите пожалуйста что из себя представляет пуля. и что из себя представляют коллайдеры , с которыми она соприкасается.

    потому что так не ясно что у вас там не так.

    а вообще вам наверняка поможет табличка коллизий. кто с кем "соприкасается"
    https://docs.unity3d.com/ru/current/Manual/Collide...
    (или на английском оригинал почитатйте) статичный. кинетик, с физическим телом. тригер. куча условий от которых может не засчитывать
    OnTriggerEnter.
    а тем более у вас там вроде как код под 2D,а сцена не понятно какая.
    Ответ написан
  • Как правильно соблюсти условие?

    MrMureno
    @MrMureno Куратор тега Unity
    VR for all
    в смысле перебивает? Аниматор, блэнд три, слои, смешивание. читайте туториал.

    unity3d.ru/distribution/viewtopic.php?f=16&t=36164 к примеру для старта поймите о чем ребята.

    ну или если у вас все проще - то больше контекста к вопросу. показать свой аниматор. анимации и как вы хотите чтоб работало и как работает сейчас.
    Ответ написан
    Комментировать
  • Проиграть анимацию с помощью скрипта и animator?

    MrMureno
    @MrMureno Куратор тега Unity
    VR for all
    аа стоп перечитал.
    вы в аниматоре сделали транзакцию. переход на следующее состояние (стрелочка эта)
    в ней вы добавили какое-то условие, с параметром.
    а потом толи удалили параметр, толи еще как то отменили - и аниматор теперь на это и ругается.
    Ответ написан
    Комментировать
  • Instantiate почему изменяется прифаб?

    MrMureno
    @MrMureno Куратор тега Unity
    VR for all
    А покажите пожалуйста в инспекторе на что у вас ссылки в public GameObject[] pref;

    возможно у вас ссылка не на префаб из ПРОЕКТА, а ссылка на ПРЕФАБ В СЦЕНЕ. тогда у вас будет браться не из, так сказать ресурсов, а будет создаваться копия того объекта ,который в сцене существует и меняется..

    UPD
    Вынесу сюда, чтоб людям не все коментарии читать.

    В общем то суть в том - что префаб содержал ссылку на СЕБЯ. и после инстанциации - начинал ссылаться на себя в СЦЕНЕ.
    надо разделить хранилище ссылок на префабы, и сами префабы.
    Ответ написан
    7 комментариев
  • Unity(C#) - Как в Update выполнить 1 раз Invoke?

    MrMureno
    @MrMureno Куратор тега Unity
    VR for all
    самое очевидное..что вам не в апдейте надо это делать..а по событию какому то.
    а так если уж надо, то обычно просто флаг булевый ставят, что действие уже выполнено
    void Update()
    {
     if(!once)
     {
     once = true;
     //invoke here
     }
    }
    Ответ написан
    Комментировать
  • Персонаж в unity вилетает со сцены?

    MrMureno
    @MrMureno Куратор тега Unity
    VR for all
    вам как минимум надо дельту на апдеите умножать на Time.deltaTime - чтобы было плавно.
    иначе получается что вы там придаете очень такую нехилую скорость.
    https://docs.unity3d.com/ScriptReference/Time-delt...
    вот почитайте что это такое.
    ну и чтоб учитывало корректно коллайдеры - вам правильно советует Даниил Басманов двигать через физику

    но при огромных значениях - даже честный просчет не поможет) "протолкнется" сквозь коллайдер или станет неадекватно вести себя
    Ответ написан
    Комментировать
  • Unity3D(C#) - Почему не восстанавливается здоровье персонажа?

    MrMureno
    @MrMureno Куратор тега Unity
    VR for all
    судя по коду у вас должно быть пять жизней и пять сердечек (и кстати советовал бы ввести одну переменную под КОЛИЧЕСТВО ЖИЗНЕЙ и везде использовать именно её.

    а так вам могу только предложить отладку включить и посмотреть что происходит на момент пополнения сердец

    но если не хотите сами искать то вот вам так сказать споилер-наводка
    if (i < character.Lives) - а от какого до какого значения меняется у вас жизнь? я так вижу от 0 до 4.
    то есть полные 5 жизней у вас когда Lives == 4
    а при проверке будет только для i равное 0,1,2,3 - включаться.
    тоесть вам или жизни считать от 1 до 5. и условие в свойстве Lives менять. или по массиву проходите с другим условием))
    Ответ написан
    2 комментария
  • Как сделать физику гранатомета?

    MrMureno
    @MrMureno Куратор тега Unity
    VR for all
    тоесть вы не знаете про физику в юнити и не представляете как сделать банально "падающий камень" и как придать ему силы..??

    надеюсь с английским у вас не так плохо..
    https://unity3d.com/ru/learn/tutorials/temas/multi...
    тут разобрана пуля без гравитации, но принцип все тот же, разве что гравитацию включить или прибавить еще вторую силу сверху давящую, чтоб сделать как бы более тяжелый снаряд

    ах да если мы про математику говорим и все такое..то вот отличная статья
    https://blog.forrestthewoods.com/solving-ballistic...
    опять же на англ.(сорян но на англ годного материала куда больше и проще найти)
    Ответ написан
  • Как не блокировать raycast из дочернего Ui?

    MrMureno
    @MrMureno Куратор тега Unity
    VR for all
    где то тут уже отвечали.
    не используйте EventTriger - он перехватывает все(прям вот перехватывает и не дает дальше никому событий, жадный очень)
    в скрипте item (или отдельном) реализуйте интерфеисы IPointerClick и подобное.

    https://docs.unity3d.com/ScriptReference/EventSyst...

    должно все заработать тогда
    Ответ написан
  • Как получить массив-компонент из объекта?

    MrMureno
    @MrMureno Куратор тега Unity
    VR for all
    массив компонент? ну так вам надо взять именно компонент со скриптом..

    public GameObject hotbar; // это поидее ссылка на объект, на котором висит HotbarBtn (script)
    private GameObject[] slots; // это те самые слоты которые вы хотите заполнить
    void Start()
    {
    // вот собственно получили ссылку на компонент
    HotbarBtn selectedComponentWithMassive = hotbar.GetComponent<HotbarBtn>(); 
    //а теперь уже из компонента можем достать массив;
    slots=selectedComponentWithMassive.Btns
    //если Btns и slots - являются массивами типа GameObject[]
    }


    так же предложил бы вам подумать..а вам точно надо в двух скриптах хранить одно и тоже??
    selectedComponentWithMassive - получив ссылку на массив, где нибудь на старте - вы уже по этой ссылке можете с ним работать..
    так что поидее сохранять ту же ссылку в еще одну переменную - может оказаться излишним.
    Ответ написан
    Комментировать
  • Ошибка в скрипте, Unity ADS, как настроить?

    MrMureno
    @MrMureno Куратор тега Unity
    VR for all
    для начала, вставляйте код через специальный тэг
    будет и форматирование и подсветка и возможность нормально его прочитать у других))


    а по сути вопроса..
    можно конечно просто написать вам правильный вариант, но давайте попробуем НАУЧИТЬСЯ..

    вот вам пару намекающих вопросов
    - вы в курсе что Update вызывается КАЖДЫЙ КАДР ?? и что у вас будет с advCount за первые же пять кадров?
    - а где у вас собственно логика проигрыша ? (так то я вижу что вроде как в месте с проверкой флага player.isDead)
    - а вы не думали что счетчик проигрышей надо как раз в месте проигрыша увеличивать?
    - и возможно тогда в том же месте где увеличиваем счетчик проигрышей - стоит и сделать проверку на то что это ПЯТЫЙ по счету проигрышь и запустить рекламу)

    судя по коду, если он ваш конечно, то проверка на "каждый пятый" - остатком от деления вы делать можете
    и метод запуска отображения рекламы - тоже умеете запустить.

    надеюсь вам это поможет. если не ясно из всех намеков - то я бы предложил какие то основы поглядеть и курсы простецкие , чтоб начать вырабатывать эдакое "программистско алгоритмическое" мышление))
    Ответ написан
    1 комментарий
  • Как вызвать переменную из другого класса?

    MrMureno
    @MrMureno Куратор тега Unity
    VR for all
    у вас так и не понятно какую переменную из какого скрипта вы хотите вызвать.!?

    и второй кусок кода - не класс, а просто пару строчек

    но в общем то случае..если вам нужна глобальная переменная сделайте

    public static float HealthWall = 100;
    тогда сможете обращаться к ней GameController.HealthWall из любого скрипта

    если же хочется не статичными переменными..то или читайте про синглтон (может вам под архитектуру подойдет)
    или просто банально ищите через Find или FindObjectOfType - объект с нужным скриптом (если они у вас в сцене)

    пока вообще не понятно что куда вы хотите "дернуть" и зачем..отсюда вытекает что толком и не понятно - что вам подсказать)
    Ответ написан
  • Существует утилита для создания шрифта?

    MrMureno
    @MrMureno
    VR for all
    я просто уточню. вам надо внутри своей программы встроить такую возможность? или просто шрифт создать ??

    так то редактировать и создавать шрифт есть же отличный FontForge
    https://fontforge.github.io/en-US/

    не знаю точно на счет импорта готовой графики, но то что там можно создать/нарисовать свой символ (правильно по глифам и тд) и вставить его вместо любого по коду - это точно.
    Ответ написан
  • Как сделать рулетку в unity3d?

    MrMureno
    @MrMureno Куратор тега Unity
    VR for all
    новые у вас и с этим кодом создадуться, тут проблем нету.

    а удалить старые. есть у вас
    GameObject obj - ссылка на объект.
    сохраните в классе ссылку на него (сейчас это локальная переменная в методе)
    (в вашем случае это будет массив ссылок или список)
    List<GameObject> objRefs  = new List<GameObject>();
    
    /////
    
    for ()
    {
    //вот вы создали объект и запоминаем в список
    objRefs.Add(obj);
    }
    
    /////удалить все из списка пройтись по списку
    foreach(var obj in objRefs)
    {
    Destroy(obj );
    }
    objRefs.Clear(); // и почистили список


    чистите старые объекты..в начале вашего метода к примеру.
    еще перед удаление объекта - можете проверить его на null, чтоб не пробовать удалять старые, вдруг они у вас самоуничтожаться могут или еще какая-то логика.

    Ну и так к слову..инстанциация дорогая операция, подумкйте над тем что возможно стоит создать все префабы на сцене и просто включать/выключать (может еще перемещать и настраивать) готовые уже объекты на сцене.
    Ответ написан
    3 комментария
  • Trying to get a relatively sized RenderBuffer without an active camera - в Unity?

    MrMureno
    @MrMureno Куратор тега Unity
    VR for all
    что там за вакханалия - это еще вопрос конечно..может у вас у камеры для зеркала тоже тэг MainCamera стоит??

    а так у вас же вроде ошибка сама за себя говорит..
    Trying to get a relatively sized RenderBuffer without an active camera
    private void OnBecameInvisible()
        {
            MCamera.enabled = false;
        }

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

    ну и так бонусом гляньте вот сюда
    https://msdn.microsoft.com/ru-ru/library/system.tu...
    вам чтоб не array возвращать поидее более чем сгодиться. и не будет этих некрасивых
    System.Convert.ToInt32((RecalculateRenderTexture(Move.herTransorm.position)[0])

    и вообще так к слову..зачем вы сделали массив из float если на деле все конвертируете в int??

    да и вы понимаете что три раза вызываете метод??
    float[] tempArray = RecalculateRenderTexture(Move.herTransorm.position);
    Camera.targetTexture= RenderTexture.GetTemporary(
                System.Convert.ToInt32(tempArray [0])),
                System.Convert.ToInt32(tempArray [0])), 
                System.Convert.ToInt32(tempArray [2])));


    Хотя бы так. просто для читаемости.
    Ответ написан
    5 комментариев
  • Dragon Bones - хороший выбор для начинающего разработчика игр на Unity?

    MrMureno
    @MrMureno Куратор тега Unity
    VR for all
    Так то на форуме обсуждают все это и даже используют..
    https://forum.unity.com/threads/dragonbones-in-uni...
    Ответ написан
    Комментировать
  • Как сравнить координаты?

    MrMureno
    @MrMureno Куратор тега Unity
    VR for all
    А теперь по делу

    так то у вас же есть информация о КОЛЛИЗИИ
    посмотрите документацию
    https://docs.unity3d.com/ScriptReference/Collision.html
    https://docs.unity3d.com/ScriptReference/ContactPo...

    физический движок предоставляет информацию о точках соприкосновения и о нормали. собственно можно узнать с какой стороны коснулось

    в вашем случае конечно проще узнать просто по Y ,кто выше , а кто ниже, но вообще знать такое - пригодится.
    Ответ написан
    1 комментарий
  • Unity3D как реализовать движение с помощью акселерометра?

    MrMureno
    @MrMureno Куратор тега Unity
    VR for all
    https://docs.unity3d.com/ScriptReference/Input-acc...
    для начала документация.
    потом еще вы в курсе что Input.acceleration меряется просто в пределе от -N до N.?
    и вот представим у вас в Input.acceleration меняется от -1 до 1. и как вы собираетесь дальше уйти??

    на основе Input.acceleration - вам надо выбрать вектор/направление куда двигаться.
    а само движение уже..что нибудь вроде

    transform.Translate(dir * speed); как в документации

    если вы осознали все, то поймете что у вас по сути вертится объект вокруг точки в пределе от -N до N.
    (тоесть вы никак не смещаете относительно текущей позиции, а высчитываете на основе акселерометра просто глобальную позицию..надеюсь внятно пояснил)))
    и Speed - банально увеличивает радиус только.
    Ответ написан
  • Какой есть эффективный и разумный способ парсинга JSON?

    MrMureno
    @MrMureno
    VR for all
    у себя обычно использовали https://lbv.github.io/litjson/
    не сказать что самый быстрый и эффективный. но достаточно хорош, и у нас в Unity3D проектах важно что под iOS с её AOT компиляцией отлично все прокатывало))

    ах да и конечно же всегда есть еще
    https://www.newtonsoft.com/json
    если нужно поновее и чтоб умело прям почти все что угодно в json переварить) да и вроде как один из самых популярных.
    Ответ написан
    Комментировать
  • Как вызвать переменную или метод другого класса через строку?

    MrMureno
    @MrMureno Куратор тега Unity
    VR for all
    ответьте почему у вас множество классов, а не один класс Country, на основе которого сделали себе объект для России и Италии и так далее?
    у них у всех будет одинаковые переменные..
    public class Country 
    {
    public string Name;
    //и другие нужные поля под страну
    }
    
    ///////////
    //создаем себе объект класса
    Country  russia = new Country();
    russia.Name = "Russia";
    //////////
    
    //и вот собственно во все инфо и подобное отдаете объект класса Country 
    //в котором все содержиться
    void Info(Country currentCountry){
    
    Text.text = currentCountry.Name;
    
    }


    конечно еще есть struct вместо класса. и про наследование можно поговорить если будет что то уникальное для каких-то стран.
    но вам еще видимо рано такое..

    но в общем то, если сильно все упростить, вы просто не использовали ООП - создав на каждую страну свой собственный класс.
    Ответ написан
    3 комментария