Движение игрока и пули сделано через transform.position, а не velocity, поэтому игрока колбасит, когда он упирается в стены;
По-моему, тут проблема не в transform.position и velocity, а в том что для всех действий которые аффектят физику нужно юзать FixedUpdate, а не Update — апдейт отрабатывает на каждом фрейме(т.е. вызовы в секунду = фпс), FixedUpdate — отрабатывает на каждый "физический тик" который вызывается каждые Time.fixedDeltaTime.
Офицальная документация говорит что для работы с объектами, у которых есть RigidBody мы должны использовать FixedUpdate:
FixedUpdate should be used instead of Update when dealing with Rigidbody. Ссылка
Так же в игре есть стандартный интерфейс с взаимодействием с временем: Time.timeScale. Офф.Док:
The scale at which the time is passing. This can be used for slow motion effects.
Слишком сложный вопрос.
Обфускация кода есть практически во всех играх, но дизассемблируя мы видим код, каким его видит процессор(а комменты/названия частенько затирают).
В одной из игр видел такой трюк: игра при каждом изменении переменной присваивает её другой переменной(всего их было 4 на каждую характеристику и они по кругу менялись). Это была пошаговая двухмерная стратегическая РПГ поэтому они могли себе позволить такие затраты памяти.
В некоторых играх значения изменяются через сеттеры и геттеры "обфусцируя" значение переменной. Пример: цивилизация, где ресурсы показываются как число с дробной частью (100.26 или 25.32), а на самом деле является интом 100.
В флеш играх часто значения переменных умножались на 8(и иногда вдобавок плюсовалась 6). Поэтому для Cheat Engine даже писал свой кастомный поиск "Flash Value" который искал (value || value 8 || value * 8 + 6)
В игре Dungeon Defenders(доступна в стим) все значения легко находятся и изменяются(если это не игра на офицйальном сервере, т.к. данные хранятся на сервере), но при подключении дебагера игра крашится. (До сих пор хз по какой причине)
Если XOR'ить значения переменных можно сделать очень неприятную ситуацию: обычные средства поиска подразумевают:
Поиск по конкретному значению с указанием типа(целое или с плавающей точкой, знаковое или беззнаковое, 4 или 8 байт на переменную)
Поиск по конкретному значению и всем типам (раньше я их разделял, потому что много времени занимало)
Fuzzy Search — Нечёткий поиск. Это поиск когда мы не говорим конкретные значения, а говорим что переменная либо: Увеличилась на х / Уменьшилась на х, Увеличилась / Уменьшилась, Изменилась / Не изменилась. Значения приведены в порядке увеличения времени и итераций поиска. Поэтому в случае XOR'а придётся выбирать самый последний, долгий и мучительный вариант.
Но всё выше перечисленное(не считая вылета при дебагинге) это лишь временная преграда, потому что самый "Крутой/жесткий/гибкий/продвинутый"(нужное подчекнуть) способ — это отслеживать изменения переменных через адресацию через базовый гейм адрес. (В статье автор использует брейкпоинт на Write, а там ещё есть брейк на Access — последний логирует все обращения к переменной и "хвост" за ней. Это позволяет нам делать совершенно любые и даже неожиданные вещи: например сделать так чтобы враги считали нас союзником(был такой хак для Halo), заставить врагов атаковать друг-друга и вообще всё, всё, всё.
Получилось много, но суть в одном — по-моему невозможно "полностью" защитить игру от подобного взлома, потому что этот способ, по-сути даёт нам возможность писать свой код в чужой программе. Например, GTA:SAMP — мультиплеер для GTA:SA работает на аналогичном методе...
Я думаю что для каждой игры свой средний объем текста:
Диабло — слешшер в нём не нужен текст (текст сведен к минимуму).
СтарКрафт(1-2), ВарКрафт(3) — содержат среднее количество текста
Ходячие мертвецы и прочие игры от TellTale Games — целиком состоят из текста(пускай и анимированного и озвученного). Ради него в них и играют.
В играх, где «сюжет — не главное» его делают, но позволяют пропускать (Диабло 3, где добавили дневники с лором о монстрах, боссах и местах, СтарКрафт 2 где в «Меню» можно посмотреть новости, поговорить с напарниками и т.д.)
Тем более «Сделать меньше текста» выглядит особенно глупо для игр в которых это основной элемент. Персона 5, которая используется на всех скринах пришла из Японии, в которой один из самых распространённых жанров игр является «Visual Novel», которые больше похожи на интерактивные книги. Сделать в них меньше текста = сделать меньше игру. (Кстати в той же Persona 3\4\5) был «опциональный лор», в который можно вдаваться а)либо потому что тебе интересно либо б) потому что он повышает характеристики твоего персонажа.
Меньше текста для игр в которых он является главной частью игры — ужасная идея. Лучше сделать какую-то его часть опциональной.
Не неофициальный сервер WoW, а «любительская реализация серверной части одной из лучших MMORPG».
Нелегально запускать свой публичный сервер.
А этот код написан фанатами и распространяется по GNU GPL (т.е. автор передает творение в общественную собственность).
Причём на сайте указано что поднятие сервера незаконно и комманда mangos не оказывает никакой поддержки в этом.
По картам с комнатами была статья:.
Также видел алгоритмы по генерации карт в туториалах по Юнити (ссылка). Если примерно, то алгоритм выглядит так:
1) Берём двумерный массив и рандомом заполняем его(в туториале использовалась переменная — % заполнения — генерим число от 0 до 100 и если оно меньше % заполнения, то ставим тут стенку)
2) Делаем несколько итераций «сглаживания» (берём каждую клетку, если это стенка если её окружает < N стенок то делаем её пустой. Если это не стена, но её окружает < M стенок, то делаем стенку). В итоге «одинокие» стенки и «дырки» пропадают. Повторяем эту процедуру X — раз. (N, M и X — то же переменные, с которыми можно играться и от них будет сильно зависить результат)
3) Делаем два лист листов: один — коллекция областей(область — коллекция клеток) в которых стены, второй — коллекция областей без стен. Таким образом у нас есть N — комнат, которые мы теперь можем просто соединить между собой или просто сдвинуть.
Играясь с переменными будет получаться совершенно разный результат. Тут ещё стоит учитывать что «сглаживание» увеличивает разрыв между пустыми клетками и клетками со стенами. В моём случае в 45-48% заполнения получались большие пустые области с несколькими комнатками, а в случае 52-55% — много небольших-средних комнатушек.
и по юсб. лет 5 назад тоже работало с андроидом...
По-моему, тут проблема не в transform.position и velocity, а в том что для всех действий которые аффектят физику нужно юзать FixedUpdate, а не Update — апдейт отрабатывает на каждом фрейме(т.е. вызовы в секунду = фпс), FixedUpdate — отрабатывает на каждый "физический тик" который вызывается каждые Time.fixedDeltaTime.
Офицальная документация говорит что для работы с объектами, у которых есть RigidBody мы должны использовать FixedUpdate:
Так же в игре есть стандартный интерфейс с взаимодействием с временем: Time.timeScale.
Офф.Док:
Слишком сложный вопрос.
Обфускация кода есть практически во всех играх, но дизассемблируя мы видим код, каким его видит процессор(а комменты/названия частенько затирают).
В одной из игр видел такой трюк: игра при каждом изменении переменной присваивает её другой переменной(всего их было 4 на каждую характеристику и они по кругу менялись). Это была пошаговая двухмерная стратегическая РПГ поэтому они могли себе позволить такие затраты памяти.
В некоторых играх значения изменяются через сеттеры и геттеры "обфусцируя" значение переменной. Пример: цивилизация, где ресурсы показываются как число с дробной частью (100.26 или 25.32), а на самом деле является интом 100.
В флеш играх часто значения переменных умножались на 8(и иногда вдобавок плюсовалась 6). Поэтому для Cheat Engine даже писал свой кастомный поиск "Flash Value" который искал (value || value 8 || value * 8 + 6)
В игре Dungeon Defenders(доступна в стим) все значения легко находятся и изменяются(если это не игра на офицйальном сервере, т.к. данные хранятся на сервере), но при подключении дебагера игра крашится. (До сих пор хз по какой причине)
Если XOR'ить значения переменных можно сделать очень неприятную ситуацию: обычные средства поиска подразумевают:
Но всё выше перечисленное(не считая вылета при дебагинге) это лишь временная преграда, потому что самый "Крутой/жесткий/гибкий/продвинутый"(нужное подчекнуть) способ — это отслеживать изменения переменных через адресацию через базовый гейм адрес. (В статье автор использует брейкпоинт на Write, а там ещё есть брейк на Access — последний логирует все обращения к переменной и "хвост" за ней. Это позволяет нам делать совершенно любые и даже неожиданные вещи: например сделать так чтобы враги считали нас союзником(был такой хак для Halo), заставить врагов атаковать друг-друга и вообще всё, всё, всё.
Получилось много, но суть в одном — по-моему невозможно "полностью" защитить игру от подобного взлома, потому что этот способ, по-сути даёт нам возможность писать свой код в чужой программе. Например, GTA:SAMP — мультиплеер для GTA:SA работает на аналогичном методе...
Диабло — слешшер в нём не нужен текст (текст сведен к минимуму).
СтарКрафт(1-2), ВарКрафт(3) — содержат среднее количество текста
Ходячие мертвецы и прочие игры от TellTale Games — целиком состоят из текста(пускай и анимированного и озвученного). Ради него в них и играют.
В играх, где «сюжет — не главное» его делают, но позволяют пропускать (Диабло 3, где добавили дневники с лором о монстрах, боссах и местах, СтарКрафт 2 где в «Меню» можно посмотреть новости, поговорить с напарниками и т.д.)
Тем более «Сделать меньше текста» выглядит особенно глупо для игр в которых это основной элемент. Персона 5, которая используется на всех скринах пришла из Японии, в которой один из самых распространённых жанров игр является «Visual Novel», которые больше похожи на интерактивные книги. Сделать в них меньше текста = сделать меньше игру. (Кстати в той же Persona 3\4\5) был «опциональный лор», в который можно вдаваться а)либо потому что тебе интересно либо б) потому что он повышает характеристики твоего персонажа.
Меньше текста для игр в которых он является главной частью игры — ужасная идея. Лучше сделать какую-то его часть опциональной.
Нелегально запускать свой публичный сервер.
А этот код написан фанатами и распространяется по GNU GPL (т.е. автор передает творение в общественную собственность).
Причём на сайте указано что поднятие сервера незаконно и комманда mangos не оказывает никакой поддержки в этом.
Также видел алгоритмы по генерации карт в туториалах по Юнити (ссылка). Если примерно, то алгоритм выглядит так:
1) Берём двумерный массив и рандомом заполняем его(в туториале использовалась переменная — % заполнения — генерим число от 0 до 100 и если оно меньше % заполнения, то ставим тут стенку)
2) Делаем несколько итераций «сглаживания» (берём каждую клетку, если это стенка если её окружает < N стенок то делаем её пустой. Если это не стена, но её окружает < M стенок, то делаем стенку). В итоге «одинокие» стенки и «дырки» пропадают. Повторяем эту процедуру X — раз. (N, M и X — то же переменные, с которыми можно играться и от них будет сильно зависить результат)
3) Делаем два лист листов: один — коллекция областей(область — коллекция клеток) в которых стены, второй — коллекция областей без стен. Таким образом у нас есть N — комнат, которые мы теперь можем просто соединить между собой или просто сдвинуть.
Играясь с переменными будет получаться совершенно разный результат. Тут ещё стоит учитывать что «сглаживание» увеличивает разрыв между пустыми клетками и клетками со стенами. В моём случае в 45-48% заполнения получались большие пустые области с несколькими комнатками, а в случае 52-55% — много небольших-средних комнатушек.