Задать вопрос
  • Добавление анимации на префаб из другого скрипта?

    BasmanovDaniil
    @BasmanovDaniil
    Геймдизайнер-телепат
    Зачем вы анимацию добавляете в рантайме? Префаб на то и префаб, что его можно настроить заранее в редакторе.
    На первой картинке у вас обведён Animator Controller, он вставляется в компонент Animator. Компонент Animation, который вы ищете на деревьях, это старый способ анимирования объектов, он не совместим с аниматором.

    Если вы внимательно посмотрите на документацию к GameObject.FindGameObjectsWithTag, то заметите, что этот метод в примере вызывается в старте. Более того, в консоли вам должны были написать:
    "FindGameObjectsWithTag is not allowed to be called from a MonoBehaviour constructor (or instance field initializer), call it in Awake or Start instead."

    Вы неправильного использовали FindGameObjectsWithTag, поэтому массив деревьев у вас оказался непроинициализирован, что и привело к исключению.

    Полезные ссылки:
    Официальные туториалы
    What is a Null Reference Exception?
    Разрешение вопросов, связанных с исключениями: Sys...
    Ответ написан
    Комментировать
  • Unity, c# и бывшая нажатая клавиша?

    BasmanovDaniil
    @BasmanovDaniil
    Геймдизайнер-телепат
    Берёте переменную float, записываете в неё время при каждом нажатии клавиши, когда нужно проверить давность нажатия, сравниваете с интервалом.
    private float lastPressedDTime = float.MinValue;
    private const float threshold = 0.5f;
    
    private void Update()
    {
        if (Input.GetKeyDown(KeyCode.D))
        {
            lastPressedDTime = Time.time;
        }
    
        if (Time.time - lastPressedDTime < threshold)
        {
            Debug.Log("D");
        }
    }
    Ответ написан
    Комментировать
  • Unity, c# и бывшая нажатая клавиша?

    GavriKos
    @GavriKos Куратор тега Unity
    Запомнить в переменную была ли нажата клавиша В и когда. При нажатии А - проверить давно ли была нажата В. ПРи нажатии С - сбросить переменную, ответственную за состояние В.

    Судя по тонне вопросов - рано вам игры писать, начните с чего попроще, или идите джуном в команду - научат.
    Ответ написан
    2 комментария
  • Привидение типов в Unity3d с использованием c#?

    BasmanovDaniil
    @BasmanovDaniil
    Геймдизайнер-телепат
    Кастануть CollisionFlags в Vector3 нельзя, но можно написать свой метод преобразования, правда получится ерунда.
    private Vector3 GetVector3(CollisionFlags flags)
    {
        switch (flags)
        {
            case CollisionFlags.None:
                return Vector3.zero;
            case CollisionFlags.Above:
                return Vector3.up;
            case CollisionFlags.Below:
                return Vector3.down;
            case CollisionFlags.Sides:
            default:
                return Vector3.zero;
        }
    }
    Ответ написан
    Комментировать
  • Перемещение 3D модели по сцене при столкновении?

    GavriKos
    @GavriKos Куратор тега Unity
    Курите настройки Rigidbody. Вариантов решений несколько, какой вам подойдет по геймплею - непонятно.
    Можно выкинуть вообще Rigidbody - вполне возможно что он не нужен.
    Можно увеличить массу Rigidbidy.
    Можно включить кинематический Rigidbody.
    Ответ написан
    Комментировать
  • Перегрузка и ее правильное название?

    @JihadTV
    Так перегрузка и не названа методом. Методом названо сложение.
    Ответ написан
    Комментировать
  • Не перемещается персонаж?

    MrMureno
    @MrMureno Куратор тега Unity
    VR for all
    Давайте я вам укажу на основную проблему в логике

    tempPos.z = tempPos.z * speed * Time.deltaTime;//изменяем позицию игрока

    вот в этой строчке.
    просто поподставляйте значения. ДельтаТайм по сути меньше 1, а скорость константа. Положение персонажа тоже по сути константа.

    Тоесть по сути если по началу положение tempPos.z отличное от нуля, то вы его просто уменьшаете, стремите к нулю, беря дробную часть.

    Как вариант вам нужно что-то вроде прибавления к текущей позиции смещения
    tempPos.z = tempPos.z + speed * Time.deltaTime * transform.forward;//к текущей позиции добавили в направлении вперед немного))
    Ответ написан
    1 комментарий
  • Equals и GetHashCode и их переопределение?

    @Maa-Kut
    В первую очередь: для корректной работы с хэш-коллекциями (типа Dictionary), а именно - при использовании в качестве ключа. Их внутренняя логика предполагает, что если для двух объектов Equals возвращает true, то и значения, возвращаемые GetHashCode, должны быть равны. Если это не так, то коллекция будет работать некорректно: скажем, не находить значения по ключу, хотя они там есть.
    Ответ написан
    Комментировать
  • Как создать песок в unity3d?

    BasmanovDaniil
    @BasmanovDaniil
    Геймдизайнер-телепат
    На сайте GDC есть презентация одного из разработчиков Journey о том, как они сделали такой песок. На форуме компании есть ещё немного информации. В основном нужный эффект достигается шейдерными трюками для блеска песка и системами частиц для имитации ветра, никакой симуляции песка и физических расчётов.
    Ответ написан
    Комментировать
  • Как создать песок в unity3d?

    Deerenaros
    @Deerenaros
    Программист, математик, задрот и даже чуть инженер
    Ну чувак, ты в конструкторы переиграл видимо, раз уже не интересно подобным заниматься. Чего ты хочешь? Создать игру и заработать мильён? Создать игру и заработать почёт? Или создать игру и выразить свои мысли? Не бойся, неправильных ответов нет, но стоит определится с ответом, так как он действительно важен.

    Вообще, тебе надо смотреть в сторону систем частиц. В юнити они действительно круты, практически всё можно сделать мышкой. Правда. Разве только это вряд ли будет быстро, но в случае чего можно запихнуть пару полноэкранных шейдеров. Собственно, вокфлоу примерно следующий: поверхность, на ней текстура песка, сверху карты нормалей. Можно процедурные, тогда будут классные следы. В любом случае, потребуется пачка скриптов, чтобы дул ветер - делаются парткилы, потом можно украсить полноэкранными шейдерами и будет красота. И всё это можно сделать за пару часов. Можно за пару дней. А можно за пару месяцев. Если ничего не знаешь и не понимаешь, будет сложно, но с опытом придёт и скорость.

    Вообще, если этот пост не понравится, лучше бросать юнити и идти работать. Если геймдев никак не выходит из головы, то попробуй сэкономить и найми художника, композитера и кодера. Сдельно, конечно, хотя кого-то можно и на четверть ставки. Собственно, вопрос в том, как далеко хочешь зайти. В любом случае, деньги лишь инструмент, когда придёт понимание, возможно станет проще. Многие за определённую, весьма скромную сумму с удовольствием реализуют весьма годный эффект, могу даже дать пару контактов, однако одним песком сыт не будешь. Надо будет построить пару сцен, наполнить их контентом. Если песок можно сделать за пару часов, то игру (полноценную игру, а не прототип на хакатоне) вряд ли получится.

    Сейчас очень популярны контентовые игры, то есть такие, в которых много наполнения, много исследования. Стратегии с вылизанным балансом и рогалики со случайными монстрами, вещами и способностями отходят на второй план. Инди упрощает себе рандомизацией, но никак не заменяет.

    В общем, удачи в начинаниях.
    Ответ написан
    Комментировать
  • Специфика SystemException?

    ArXen42
    @ArXen42
    Насколько я знаю, сначала MS пытались разграничить системные исключения и исключения приложения - введя базовые классы, емнип, называются SystemException и ApplicationException. Но в процессе разработки платформы все перемешалось и вместо структурированной иерархии получилось вот это, а выкинуть эти исключения они уже не могут из-за обратной совместимости.
    Ответ написан
    Комментировать
  • Специфика SystemException?

    @Flashmond
    Студент, инженер-программист c#
    По поводу первого вопроса. Нет, во время компиляции все исключения не приводятся к определенному типу. То есть бросается исключение DevideByZeroException, а потом последовательно в блоках catch ищется тот тип, к которому это исключение можно привести.
    Например, вы можете выполнять разные действия при разных исключениях. Код, в котором ловится исключение типа Exception выполнится только в том случае, если сгенерированное исключение не может быть приведено к типам, описанным ранее
    try
    {
    	//Code
    }
    catch ( DivideByZeroException ex )
    {
    }
    catch ( ArithmeticException ex )
    {
    }
    catch ( Exception ex )
    {
    }
    Ответ написан
    Комментировать
  • Yield и потоки?

    yarosroman
    @yarosroman Куратор тега C#
    C# the best
    Не совсем, тут смотрится из какого потока вызывается и при необходимости возвращается другой перечислитель(Enumerator), просто если в нескольких потоках у вас идет перечисление коллекции, то в одном потоке вы не получите всю коллекцию, просто перед обращение к Current, может быть вызван метод MoveNext.

    Enumerator лучше делать закрытым внутренним классом. В принципе даже не обязательно делать его реализацией интерфейса. достаточно просто метода MoveNext и свойства Current.
    Ответ написан
    1 комментарий
  • Цикл foreach при работе с коллекциями и массивами?

    impwx
    @impwx
    Разработчик
    Вы перепутали понятия "коллекция" и "перечислитель".

    Обычно коллекция хранит элементы, а перечислитель - ссылку на перечисляемую коллекцию и текущее положение в ней. Каждый раз, когда вы используете стандартную коллекцию (массив, список и т.д.) в foreach, создается новый перечислитель. Поэтому сбрасывать состояние не надо. Вы же сделали химеру из коллекции и ее собственного перечислителя (return this as IEnumerator), поэтому вам приходится сбрасывать состояние руками.

    Это очень плохой код. Решение - не создавайте собственные коллекции вообще. Еще с C# 2.0 существуют универсальные обобщенные коллекции - List<T>, Dictionary<TKey, TValue> и множество других, которые следует использовать.
    Ответ написан
    Комментировать
  • Создание объекта блокировки?

    Если будет лочиться один и тот объект в разных классах, то да, такое разделение возможно.
    В комментарии к вопросу Михаил уже указал как это можно сделать.
    Ответ написан
    Комментировать
  • Работа статического метода при многопоточности?

    Ogoun
    @Ogoun
    Programmer
    В .NET разделяемыми ресурсами являются данные, но не методы. Т.е. все что находится в теле метода и сам метод, может обрабатываться параллельно в любом количестве потоков независимо друг от друга, а вот например поле статического класса уже будет видно сразу нескольким потокам и доступ к нему нужно делать потокобезопасным.
    По вашему вопросу, в общем случае нет разницы статический метод или нет, любой метод можно запустить на параллельное исполнение в разных потоках. Важно только следить как эти методы будут работать с общими ресурсами.
    Ответ написан
    Комментировать
  • Книга по математике?

    Возможно, подойдет серия (из 7 книг) "Вся высшая математика".
    Здесь вы можете посмотреть, подойдет вам стиль изложения или нет.
    Ответ написан
    Комментировать
  • Книга по математике?

    timurkashapov
    @timurkashapov
    Программист
    Это шедевр! Спасибо, очень хотел найти такую энциклопедию по вычислительной технике.
    От себя могу посоветовать только вот такую серию книг по математике: matematika.deagostini.ru
    В данных сериях книг представлены практические аспекты математики в нашей жизни. Есть хорошо иллюстрированные примеры.
    Ответ написан
    Комментировать
  • Открепление лямбда метода от события?

    stackoverflow.com/questions/183367/unsubscribe-ano...
    Action myDelegate = delegate(){Console.WriteLine("I did it!");};
    
    MyEvent += myDelegate;
    
    
    // .... later
    
    MyEvent -= myDelegate;


    Но луче послушать этого мужика:
    "From memory, the specification explicitly doesn't guarantee the behaviour either way when it comes to equivalence of delegates created with anonymous methods.

    If you need to unsubscribe, you should either use a "normal" method or retain the delegate somewhere else so you can unsubscribe with exactly the same delegate you used to subscribe."
    Jon Skeet
    Ответ написан
    2 комментария