Ответы пользователя по тегу C#
  • В чём разница между операторами ??, ??= и ?. в C#?

    dollar
    @dollar
    Делай добро и бросай его в воду.
    int? x = null;
    int y = x ?? -1; // Если x равно null, то y будет равно -1
    
    int? z = null;
    z ??= 5; // z будет равно 5, поскольку оно было равно null
    
    string str = null;
    var length = str?.Length; // length будет равно null
    Ответ написан
    Комментировать
  • Как написать подсчет времени проведенного в игре для лаунчера?

    dollar
    @dollar
    Делай добро и бросай его в воду.
    Просто следишь, что такой-то процесс всё ещё запущен и находится в памяти.
    В Стиме сделано так, что эта инфа периодически отсылается на сервер, и там уже происходит подсчет времени.
    Ответ написан
    Комментировать
  • Что учить дальше после основ c# для unity?

    dollar
    @dollar
    Делай добро и бросай его в воду.
    Если игры сами делать будете, то дальше учить геймдизайн. Можно по книгам, которые можно найти в гугле. А если гуглить не получается, то нужно учить, как гуглить и вообще работать с информацией.
    Ответ написан
    Комментировать
  • Как завершить абсолютно все процессы в Windows?

    dollar
    @dollar
    Делай добро и бросай его в воду.
    Для "прикола" достаточно завершить explorer.exe. Это уберёт панель задач и рабочий стол.
    Ответ написан
    2 комментария
  • Не приходит значение View?

    dollar
    @dollar
    Делай добро и бросай его в воду.
    Так сделайте отладку.
    Вставьте в нужные места console.log() или хотя бы alert(), и смотрите, где какие промежуточные значения.
    Ответ написан
  • Как сделать 2D спрайт гибким, подобным верёвке?

    dollar
    @dollar
    Делай добро и бросай его в воду.
    Сама по себе идея - сложная. Поэтому, думаю, более правильным будет не искать готовое решение, а сделать самому. Уж слишком много нюансов будут касаться именно вашей игры: как именно будет работать физика верёвки, насколько она должна быть реалистичной, нужна ли (и какая) оптимизация и т.д. Например, будет ли персонаж падать, если ноги запутаются в верёвке - решать только вам.

    В игре Journey (2012 года) персонаж как бы перепрыгивает через свой собственный длинный шарф, если ради эксперимента попытается споткнуться об него. Однако на шарф компаньона это не действует, и персонаж просто проходит сквозь него. Лень ли это разработчиков, или у них не было выбора, нам уже не узнать.

    Пока что я нашёл решение в использовании джоинтов, и разделении верёвки на кусочки, для имитации гибкости. Но было бы круто научиться изменять сам спрайт.

    Хорошая мысль. А зачем менять спрайт? Так даже лучше, потому что вместо спрайта верёвки вам теперь нужен спрайт лишь одного звена, который можно просто размножить.
    Ответ написан
    1 комментарий
  • Как редактировать код игры, будучи непосредственно в этой игре?

    dollar
    @dollar
    Делай добро и бросай его в воду.
    Если это не для вашего удобства, а для удобства пользователей, то лучше Lua, а именно MoonSharp. Язык простой, учится легко, и пользователю не нужно глубокого понимания C#.
    Ответ написан
    Комментировать
  • Персонаж иногда прыгает на двойную высоту. Как это исправить?

    dollar
    @dollar
    Делай добро и бросай его в воду.
    private void Jump() {
            rigidbody.AddForce(transform.up * jumpForce, ForceMode2D.Impulse);
    }

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

    dollar
    @dollar
    Делай добро и бросай его в воду.
    Сама программа (Steam) противится запуску нескольких экземпляров себя. Она смотрит, что уже есть запущенная вторая копия, и сразу самозавершается. В результате кажется, что не запускается вовсе.

    Думаю, что с файлом calc.exe (который в папке windows) - всё получится.
    Ответ написан
    5 комментариев
  • Почему игры созданные на Unity имеют много багов?

    dollar
    @dollar
    Делай добро и бросай его в воду.
    Потому что Unity прост в освоении. Нынче даже школьники могут легко начать делать игры на Unity. Таким образом, игры могут делать даже не программисты (не настоящие программисты).

    Второй причиной является экономия при разработке. Unity - это уже само по себе экономичное решение. Многое доступно из коробки. Специалисты стоят дешево. Во всяком случае, дешевле, чем серьёзные бородатые программисты на C++. Но можно же пойти дальше, и сэкономить на тестировании, на создании документации и пр. Отсюда и забагованность.

    Ну и третьим моментом являются разные странности и некоторая черезжопность использования Unity (не везде и не всегда, конечно же). То есть это недостаток опыта и знаний о самом Unity, о его болезнях.
    Ответ написан
    7 комментариев
  • Какой будет самый производительный алгоритм сортировки?

    dollar
    @dollar
    Делай добро и бросай его в воду.
    Сложность сортировки в общем случае будет O(N*log(N)).

    Но если есть или вы готовы ввести дополнительные ограничения, то можно улучшить этот показатель.

    Вот пример для вашего случая.
    spoiler
    Что есть "большое число"? Предположим, это число от 90 до 100.

    Предположим, у вас значения распределены в массиве более или менее равномерно (имеется в виду частота встречаемости). На самом деле не важно, какое распределение, главное знать, какое оно. В любом случае это дополнительное условие. То есть если про массив не известно ничего, то можно либо предположить это дополнительное условие, сославшись на отсутствие прочих данных, либо поменять программу так, чтобы оно соблюдалось.

    Таким образом, если распределение равномерно, то большие числа составляют примерно 10% от общего количества элементов. На самом деле важнее всего, что пороговое число - 90.

    Теперь мы можем сортировать массив простым алгоритмом сложности O(N) - просто на две кучи: большие и маленькие числа. Делим массив в соотношении 1 к 10, ну и сортируем за один проход. Конечно, будут накладки, но в целом это должно быть не критично. Отсутствие важности - это тоже дополнительное условие, увы.

    В результате такой стремительной сортировки вы получаете самые большие числа в начале и остальные в конце. Дальше можно скормить это вашей формуле.
    Ответ написан
  • Как правильно организовать взаимодействие между скриптами?

    dollar
    @dollar
    Делай добро и бросай его в воду.
    Привет, товарищ!
    Хотел сказать, что мне ник твой не понравился. Стремный какой-то.
    Всё остальное на высоте. Реально, классный вопрос задал.
    Я подписался на тебя.
    Ответ написан
  • Как исправить, что бы персонаж в Unity не улетал в "космос" при прыжке у стены?

    dollar
    @dollar
    Делай добро и бросай его в воду.
    Код:
    isGrounded = Physics2D.OverlapCircle(groundCheck.position, checkRadius, whatIsGround);

    Не работает, потому что сразу же после этого вызывается функция CheckGround(), в которой переменная isGrounded снова перезаписывается:
    Collider2D[] colliders = Physics2D.OverlapCircleAll(transform.position, 0.6F);
    isGrounded = colliders.Length > 1;

    Поэтому первую строчку вообще не будем рассматривать, эта пустышка, которая ничего не делает, только процессор нагружает лишний раз. Разберем, что же происходит в последних строках.
    Вы считаете количество коллайдеров в круговой области. И если оно больше 1, то isGrounded будет true.
    Видимо, около стены вы также считаете стену. Поэтому наличие стены делает isGrounded = true.
    В чем здесь логика, вам виднее.
    Исправляйте. :)
    Ответ написан
  • Как сделать поворот игрока за курсором как в Top Down Shooter Unity3D 2019?

    dollar
    @dollar
    Делай добро и бросай его в воду.
    Поэкспериментируйте с функцией ScreenToWorldPoint().
    Также есть ScreenPointToRay().
    Далее, имея координату в 3D пространстве, можно уже легко считать поворот персонажа в сторону этой точки.
    Ответ написан
    Комментировать
  • Как исправить проблему с определением земли?

    dollar
    @dollar
    Делай добро и бросай его в воду.
    Учтите, что координаты - вещественные числа.

    Возможно, у вас высота персонажа 0.00000000138456827364. То есть выше нуля. И если вы проверяете тупо сравнением (a > 0), то персонаж получается висит в воздухе. Нужно либо округлять, либо вносить поправку на погрешность, хотя бы до 4-5-го знака:
    (a - 0.0001 > 0)
    Ответ написан
  • Как запретить движение камеры в unity по оси Х?

    dollar
    @dollar
    Делай добро и бросай его в воду.
    Смотря как она у вас движется.

    Если она прикреплена, то нужно просто менять эту координату каждый кадр на то, что вам нужно. Скажем, вычислять, какое должно быть относительное смещение с учетом положения игрока в мире.
    void LateUpdate() {
      float x = ...........; // вычисляете, на что сменить.
      transform.position = new Vector3(x, transform.position.y, transform.position.z);
    }

    Визуализация
    5dc3cf0c6aa57097422622.png


    Если же у вас камера перемещается тупо вручную (в Update), то также вручную НЕ перемещать ее по X. То есть вместо функции от координаты X игрока подставлять transform.position.x (т.е. эту же координату).
    Ответ написан
    3 комментария
  • Не стандартные ходы в игре на Unity. Как прописать их логику верно?

    dollar
    @dollar
    Делай добро и бросай его в воду.
    Не совсем понятно, в чем проблема. Верная логика та, в которой нет ошибок. А ошибку можно искать, только если точно понятно, что вы хотите сделать, то есть какая цель. Если занудствовать, то можно послать вас вообще в самое начало, и попросить определить цель с точки зрения геймдизайна, то есть какие ощущения вы хотите вызвать у игрока и почему именно таким образом. В любом случае, отталкиваться нужно именно от цели, так что целеполагание очень важно.

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

    Если вопрос про то, как сделать граф, то как угодно. Например, точки - объекты-элементы массива. И каждый такой объект может содержать несколько индексов других элементов, которые будут означать связь с другими точками в этом же массиве.

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

    Если вопрос про управление на графе, то оно такое же - мышь или палец, то есть клик/тап. Учтите ещё, что на мобильных устройства нет наведения на элемент, так что сейчас у вас игра по сути ограничена только ПК. Стрелки клавиатуры можно сделать просто, но в случае 5-и связей просто не хватит клавиш, то есть время от времени игроку нужна будет мышь. Еще можно цифрами на клавиатуре, тогда сами связи нужно будет визуально нумеровать.

    Если вопрос про то, как боты будут ходить в произвольном графе, то это всевозможные алгоритмы поиска пути, из которых наиболее классическим (и основой для других) является A* (Astar).

    Возвращаясь к геймдизайну, у вас нет отображения выпавшего числа ходов на экране, т.е. его нужно нащупывать. В этом и состоит интерес? Также обратите внимание на сам дайс. Если его нет в игре, то это большое упущение, как мне кажется. Сделайте крутой дайс, чтобы он прям перекатывался по экрану, и чтобы игрок до конца не мог угадать, что же выпадет - возможно, это станет ключевым моментом в вашей игре, а ходы и прочее - лишь дополняющие механики. В общем, всё зависит от цели.
    Ответ написан
    Комментировать
  • Как убрать возможность "флипа" HelthBar'а?

    dollar
    @dollar
    Делай добро и бросай его в воду.
    Засунуть его в другую ветку?
    Общий Родитель -> в нём Бар и Перс.
    Координаты меняем общего родителя.
    Флипаем перса.
    Как-то так.
    Ответ написан
    6 комментариев
  • Где найти исходники боев 5 на 5 в 2D игре для unity3d или другого движка?

    dollar
    @dollar
    Делай добро и бросай его в воду.
    А при чем здесь исходники боев? Вам нужно изучать геймдизайн и создание ИИ.
    Ответ написан