Гость Sergey1953 Опубликовано 8 октября, 2019 Поделиться Опубликовано 8 октября, 2019 (изменено) Доброго времени суток! Увлекаюсь изучением игр изнутри довольно давно, но до сих пор не смог понять одной простой вещи - это то, где или как в 3D играх формируется скорость. Поясню ситуацию, имеется игрушка GTA III, там есть машинки, которыми мы можем управлять, то есть мы сели и поехали. Особого труда не составит найти координаты хотя бы X и Y (Z не учитываем), также через поиск по структуре можно запросто найти адреса памяти в которых хранится смещение на координатной плоскости (то, что прибавляется к значению в адрес с координатами). К примеру, мы двигаемся на машине на север с постоянной скоростью => по оси Y у нас идёт смещение, например, +3.0. то есть по оси Y было 0.0, потом 3.0, 6.0 и так далее. Всё бы ничего да только эти значения не являются скоростью автотранспорта => по моему разумению, нужно найти тот участок памяти (адрес), в котором записана текущая скорость, которую набрал транспорт, с этим как раз и проблема. Хочу заметить что я в курсе, что тут возможно есть работа с векторами скорости, так как копаясь в одной функции для Cheat Device, что в свою очередь был для GTA Vice City Stories (но то не важно), мною была обнаружен такой комментарий и код: // velocity = velocity + forward vector * thrust boost = 0.5; thrust = boost * 0.00333; setfloat(pcar + 0x0140, getfloat(pcar + 0x0140) + getfloat(pcar + 0x0010) * thrust); setfloat(pcar + 0x0144, getfloat(pcar + 0x0144) + getfloat(pcar + 0x0014) * thrust); setfloat(pcar + 0x0148, getfloat(pcar + 0x0148) + getfloat(pcar + 0x0018) * thrust); Это C подобный синтаксис, поэтому поясню сам: 1) boost - ускорение 2) thrust - толчок 3) pcar - начало структуры машины, в которой мы сидим По моему разумению, pcar + 0x0140 - это адрес, который как раз таки и хранит смещение по координатам, которые прибавляются к осям X, Y, Z. Тогда исходя из формулы: // velocity = velocity + forward vector * thrust ===> скорость = смещение по координатам + вектор * толчок. Если я всё правильно понимаю конечно же)) Но вопрос, что же такое forward vector? Это угол разворота машины или же что-то иное? Изменено 9 октября, 2019 пользователем Sergey1953 Куски кода для удобства чтения нужно оборачивать специальным тегом. Ссылка на комментарий Поделиться на другие сайты Поделиться
partoftheworlD Опубликовано 8 октября, 2019 Поделиться Опубликовано 8 октября, 2019 58 минут назад, Sergey1953 сказал: Это угол разворота машины или же что-то иное? Обычно это вектор единичной длины(если по простому - шаг проделываемый объектом), который используется для вычисления позиции за определенное количество времени и может принимать в себя разные параметры, типа ускорения, скорости и т.д. Ссылка на комментарий Поделиться на другие сайты Поделиться
Гость Sergey1953 Опубликовано 8 октября, 2019 Поделиться Опубликовано 8 октября, 2019 9 минут назад, partoftheworlD сказал: Обычно это вектор единичной длины(если по простому - шаг проделываемый объектом), который используется для вычисления позиции за определенное количество времени и может принимать в себя разные параметры, типа ускорения, скорости и т.д. И его никак нельзя найти? Ссылка на комментарий Поделиться на другие сайты Поделиться
partoftheworlD Опубликовано 9 октября, 2019 Поделиться Опубликовано 9 октября, 2019 1 час назад, Sergey1953 сказал: И его никак нельзя найти? Ищется так же как и любое другое значение в памяти. Не можешь найти скорость, значит ищи, то что можешь, например координаты, от них можно восстановить код и выйти на кусок кода работающий с расчетом координат, от него выходишь на дистанцию, от дистанции на скорость, от скорости на forward vector и т.д. Ссылка на комментарий Поделиться на другие сайты Поделиться
Xipho Опубликовано 9 октября, 2019 Поделиться Опубликовано 9 октября, 2019 Был у нас пользователь AntonVit, он как-то публиковал видео по поиску скорости или ускорения для симуляторов гонок. Там он искал коэффициенты ускорения вращения колес. К сожалению, видео более недоступно, поскольку автор его удалил. Связаться с автором тоже не представляется возможным, так как он покинул нашу скромную обитель. Ссылка на комментарий Поделиться на другие сайты Поделиться
MasterGH Опубликовано 9 октября, 2019 Поделиться Опубликовано 9 октября, 2019 28 минут назад, Xipho сказал: он как-то публиковал видео по поиску скорости или ускорения для симуляторов гонок. Да вроде я выкладывал AntonVit-видео на форум 8 часов назад, Sergey1953 сказал: это то, где или как в 3D играх формируется скорость. Разные варианты есть, зависит от кода Обычно самый простой если по одной координате x = x + dx * dt * Time.deltaTime; Где dx например это 3м, а dt= 1c, Time.deltaTime - разница времени между кадрами отрисовки. Получается смещение на 3 метра за 1 секунду с учетом синхронизации кадров. Кадр может быть отрисовки или кадр может быть физическим. Это упрощенная схема. Для 3д Как обычно используются уже три оси и углы поворота. Если в игре есть физ. движок то там задается velocity по координатам. В более реалистичных расчетах есть формулы посложнее. Там скорость передвижения задается от колес, как Xipho написал var fwdSpeed = Vector3.Dot(rigidbody.velocity, transform.forward); (link) 8 часов назад, Sergey1953 сказал: нужно найти тот участок памяти (адрес), в котором записана текущая скорость Текущая скорость это просто готовая уже рассчитанная величина для показа например в графическом интерфейсе. Толку её искать. Другое дело искать ускорение и предел скорости, другие параметры... Вот от них уже зависит и скорость и другое. 8 часов назад, Sergey1953 сказал: boost = 0.5; Судя по коду эту величину и надо менять 8 часов назад, Sergey1953 сказал: Но вопрос, что же такое forward vector? Вариант 1. Это нормализованный вектор в глобальной системе координат. Нормализованный, т.е. от 0 до 1 каждая его ось. Вариант 2 Направление игрового объекта, туда куда он как бы смотрит относительно самого себя. Обычно, тоже сразу нормазилованный. Если бы я знал точку А и точку Б, то направление было бы Б - А. Это без нормализации. Если А - точка откуда я смотрю, а Б - точка куда я смотрю. То вектор направления был бы также: Б - А. Но если я хочу относительно модели всегда знать, куда она направлена, то надо знать Б относительно 3д сетки. Короче forward позволяет узнать вектор направления. Так называемый локальный Forward можно разными способами высчитывать. Ссылка на комментарий Поделиться на другие сайты Поделиться
Garik66 Опубликовано 9 октября, 2019 Поделиться Опубликовано 9 октября, 2019 6 часов назад, MasterGH сказал: Да вроде я выкладывал AntonVit-видео на форум Вот оно - ТЫК Ссылка на комментарий Поделиться на другие сайты Поделиться
Antonshka Опубликовано 9 октября, 2019 Поделиться Опубликовано 9 октября, 2019 У меня из опыта такие мысли по этому поводу. У каждой машины есть свои технические характеристики. Например вес, инерция, аэродинамика, мощность двигателя, количество передач, вес колеса. Все это и много другое определяет поведение каждого автомобиля, в частности его ускорение и максимальную скорость. Изменив параметры изменим скорость. Есть также инструкция кода, которая сбрасывает значения Velocity до максимально разрешенных. Занопив инструкцию снимем ограничение. Ссылка на комментарий Поделиться на другие сайты Поделиться
DieVis Опубликовано 17 октября, 2019 Поделиться Опубликовано 17 октября, 2019 В 09.10.2019 в 19:44, Antonshka сказал: У каждой машины есть свои технические характеристики. Например вес, инерция, аэродинамика, мощность двигателя, количество передач, вес колеса. Я через нр машины в игре The Simpsons Hit & Run выходил на выше перечисленное, можно было даже заставить её летать :)) Ссылка на комментарий Поделиться на другие сайты Поделиться
Рекомендуемые сообщения