Создание моей собственной камеры убийства


15

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

Мои мысли:

-Я не могу просто сохранить в памяти, когда люди убивают других, потому что я не знаю, когда начать «процесс записи». У меня есть возможность точно определить, когда кто-то «собирается» кого-то убить.

- Моя единственная реальная идея до сих пор - иметь полную копию всего, загруженного в сторону, копирующую все движения из оригинального мира, но с 10-секундной задержкой. Таким образом, все камеры убийства будут длиться 10 секунд, и камера людей будет просто перемещена во второй мир их убийцы.

Мои вопросы:

Есть ли уже принятый способ сделать это? У кого-нибудь есть хорошие идеи для чего-то подобного? Спасибо, если можете!

Ответы:


10

Сохраните последние несколько секунд данных движения соответствующих динамических объектов .

Эти данные должны быть достаточно полными, чтобы их можно было использовать для восстановления сцены killcam, если это необходимо, но недостаточно полными, чтобы вы могли позволить себе извлекать и хранить их с достаточно короткими интервалами.

Примеры вещей, которые вы можете отслеживать:

  • В какую сторону движется / смотрит видимый игрок
  • Увеличен ли убийца на прицеле?

Вещи, которые вы, вероятно, хотите оптимизировать:

  • Данные об игроках, которых убийца не видит
  • Фактический вывод на экран любого

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

2
@Gajet Я думаю, что в данном случае он имеет в виду отбраковку всех релевантных объектов и сохранение данных для них только потом. Другими словами, вы уже хотели бы иметь какой-то механизм хранения / обновления для отслеживания позиций всего и их сущностей, но в течение ограниченного времени. Скажем, вы просто хотите последние 10 секунд для убийственной камеры. Вам просто понадобится структура данных, достаточно большая, чтобы хранить последние 10 секунд, и все, что старше этого, будет заменено в конце, например, в двусторонней очереди.
ChrisC

Я только хотел подтвердить, что ответ Райсера. В самом деле: когда вы не можете предсказать будущее, подготовьтесь к нему. :)
Анко

1
Важно отметить, что онлайн-игры в реальном времени никогда не показывают игрокам, что на самом деле произошло; игра всегда строит догадки о том, какой может быть правда, но из-за задержек и других сетевых проблем игры не узнают, какой была «объективная правда», гораздо позже - если вообще. Поэтому, если у вас нет доступных данных «kill cam», чтобы иметь возможность воссоздать чужую точку зрения, вам совершенно не должно быть плохо при составлении правдоподобных данных «kill cam» в тех ситуациях, когда вам это нужно.
Тревор Пауэлл

0

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


0

Вы можете сохранять трансформации объекта каждые пару секунд или около того. Сделайте это для всех применимых динамических объектов. Поместите сохранение так, чтобы в каждом кадре вы сохраняли только пару матриц. сохранить как можно раньше.

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

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


Существует одна проблема с сохранением только матриц преобразования, а не с сохранением чего-либо еще! Например, если вы сохраняете матрицы трансформации только для игроков, анимация может работать неправильно, вы не сможете увидеть, какой урон получил противник, прежде чем убить вас, и когда он выстрелил из своего оружия. Есть длинный список деталей, которые вы пропустили, используя свой метод, чтобы вы могли легко думать о них.
Ali1S232

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

0

Вы можете реализовать некоторые функции воспроизведения в своей игре. используя функцию воспроизведения, killcam - это просто воспроизведение, воспроизводимое в определенное игровое время и с точки зрения некоторых игроков. позже вы можете сохранить повторы и позволить другим просматривать игры после их завершения.

Кроме того, ваша идея запустить ту же игру с входами с задержкой в ​​10 секунд - это хороший подход, если ваша игра не потребляет больших вычислительных ресурсов.


0

Как насчет этого...

Запись только тогда, когда есть возможность убийства.

Подумайте об этом с точки зрения AIM-BOT. Он будет целиться / стрелять только тогда, когда возможно убийство. Таким образом, вы должны записывать, только когда враг находится в пределах видимой дистанции.


Как насчет ситуаций, связанных со стрельбой через объект? Лучшее приведение лучей, несомненно, будет более ресурсоемким, чем некоторые другие заявленные идеи. Хорошая идея, хотя, я мог бы рассмотреть это как часть решения.
Freesnöw

0

Установите радиус вокруг игрока, и если другой игрок вводит радиус, он начинает запись экрана для обоих людей. Затем вы ждете, чтобы увидеть, если кто-нибудь убит. Если так, то вы находите убийцу, берете их записи и перематываете время, прошедшее с момента уничтожения, плюс продолжительность, на которую вы хотите, чтобы видео было перемотано, и воспроизведите его для того, кто был убит. Если никто не убит и никто не находится в радиусе вокруг персонажа, удалите или остановите запись. Если убийца увеличен в прицеле, направьте луч туда, куда он целится, и создайте еще один радиус запуска. Если в нем кто-то есть, он записывает экран того, кто находится в радиусе, в который целится персонаж, и о том, как персонаж целится. Если кто-то умирает из-за прицеливания персонажа, то вы берете время, прошедшее с момента убийства, плюс длину, которую вы хотите, чтобы камера для убийства была, и вы перематываете и играете это для того, кто был убит. Если они уменьшают масштаб, остановите запись. Это концепция, поэтому я не пробовал.

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.