Войти
ПрограммированиеФорумФизика

Вопрос про Камеру игрока. (2 стр)

Страницы: 1 2
#15
19:00, 24 фев. 2021

tonline_kms65
> Я даже могу сказать, уже практически со всей определённостью, я один такой на
> этом движке
Зачем тогда использовать тот движок?


#16
(Правка: 19:19) 19:15, 24 фев. 2021

sledo
> Зачем тогда использовать тот движок?

Вопрос из разряда а зачем мы живем? Без комментариев, что бы "порожняки не гонять".

Сглаживать лерпом, это практически то же самое, что я двигаю вектором.
Из твоего совета я могу взять одну интересную мысль, пусть танк двигается так как двигается, пусть его трясет и т.д.
Но! я могу следом за ним двигать камеру(танк и камера к одной общей точке привязаны, т.е. двигать точку)только камера не подчиняется законам физики и просто летит за танком, так вот здесь и самое интересное, я же могу перекрестие(прицел) нарисовать в центре камеры и это перекрестие будет камерой, что-то я сразу не сообразил. А уже все прицеливания танка производиться будут именно в центр камеры(перекрестие). Конечно не в саму камеру, а туда куда она смотрит.
Это если я верно понял саму суть.

#17
19:23, 24 фев. 2021
нужно выспаться
#18
20:06, 24 фев. 2021

Для наглядности видео. Вторая половина - вид от первого лица(камера игрока), видно как трясёт танк на неровностях.

Запустить видео по клику - Как делать игрыЗапустить видео по клику - Как делать игры

#19
20:09, 24 фев. 2021

tonline_kms65
> Вопрос из разряда а зачем мы живем? Без комментариев, что бы "порожняки не
> гонять".
Вопрос как раз не праздный. Подробность технической документации и туториалов по работе с инструментом, напрямую влияет на конечный результат и скорость работы.

Nurik
> Это если я верно понял саму суть.
Да, только я предложил двигать камеру вслед за танком, поскольку обычно физика не очень любит когда ее двигают не физикой. Двигать и камеру, и танк вслед за точкой предложил Salamandr.

#20
(Правка: 22:53) 22:48, 24 фев. 2021

Lerp или Линейная интерполяция это функция, а не библиотека и тем более не движок. Алгебраическое выражение, если хотите. Как парабола или f(n) = x^2 (тоже функция)
https://suvitruf.ru/2019/03/13/4305/a-brief-introduction-to-lerp/

#21
23:14, 24 фев. 2021

tonline_kms65
> Для наглядности видео. Вторая половина - вид от первого лица(камера игрока),
> видно как трясёт танк на неровностях.
Ёлки, так тебе вообще не нужен танк - все же от первого лица. Бери обычный контроллер от первого лица, немного подшамань его чтобы ты двигался по стрелочкам, а не в строну камеры и готов твой танк. Нацепи модельку для других игроков, чтобы они думали что твой FPС железный и весь из себя бронированный, гуслянки на физику и двигай его на каждый просчет физики.

Я то думал тут убийца WoT, только лучше.

#22
(Правка: 23:58) 23:51, 24 фев. 2021

Вся магия происходит вот тут
Есть точка А в которой находится сейчас камера
Есть точка Б куда нам нужно попасть.
Путь равен Б - А.
var distance = (vecB - vecA) / (scale * deltaTime) ;
scale = 2; (то есть это некоторое число, какую часть пути мы возьмем). 2 это половина или 1/2.
Если будет стоять 3, то соответственно 3я часть пути или 1/3 часть всего пути (для нас это будет выглядеть как ещё плавнее).
И так, мы получили новую точку пути, телепортируем туда камеру
Camera.position = Camera.position + distance;
Считать мы будем каждый раз по новой, вот тут и начинается магия. Сейчас мы прошли половину пути от всего (при scale равным 2). Осталось пройти столько же, НО, на следующем кадре мы снова вычисляем путь, он равен половине, что логично. Но так как мы снова берем лишь половину пути, то получается, что чем ближе мы к точке Б, тем медленней мы к ней движемся (плавнее).
Вот, как то так.

#23
(Правка: 2:22) 2:05, 25 фев. 2021

sledo
:-) я об этом и говорю всю тему уже.
Это же не юнити и ему подобные движек.
Проблема в том, что нет здесь контроллеров, нет колайдеров, нет стрелочек, это все нужно самому сочинять. Камеру, к примеру, я забрал у игрока, и ею пользуюсь игрок в это время стоит на месте, не двигается.
Персонажа со всем его управлением приходится создавать с нуля, благо что движек физический.
Хотя принцип чем то похож на юньку.
Я уже понял, примерно, по какому принципу делать, посмотрю что на практике получится.
Все что ты описал я и применил, но применил к модели танка, а камеру приаттачил к этой модели.
Сейчас попробую изменить, будет общая точка, буду её двигать с клавы, и так же с клавы останется управление танком. Такой вариант я не продумывал ещё.

#24
(Правка: 4:20) 2:19, 25 фев. 2021

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

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

И еще вопрос, в этом движке нет deltaTime, из чего можно получить? Есть точное общее игровое время, есть еще куча времени, но все по принципу общего игрового времени, как можно из общего времени получить deltaTime?

deltaTime это хорошо при разницах в тикрэйтах, тем более движек для сетевой игры.

#25
5:11, 25 фев. 2021

Насколько этот код рабочий?

temp = timeGetTime();
dt = timeGetTime()- temp;   //deltaTime
#26
9:41, 25 фев. 2021

Можете убрать еë из уравнения, scale выставить в 50 или 100.

#27
(Правка: 6 мар. 2021, 4:53) 12:15, 4 мар. 2021

Salamandr

Смотри, я сделал визуальную подсветку угла, на который поворачиваю, и описал радиус по которому идет поворот. Поворот делал на ровной плоскости, что-бы исключить столкновения.
Я вот смотрю на радиус - линия неровная, как-то скачками идет, может быть это с клавы приходят значения косячные? Может такое быть? Как это можно проверить?

поворот003 | Вопрос про Камеру игрока.

Наверно вот так понятнее будет вопрос

Запустить видео по клику - Как делать игрыЗапустить видео по клику - Как делать игры

На видео сделал сравнение поворотов с клавиатуры игрока и своей ENT, это команды IN_RIGHT и IN_LEFT(клавиши поворотов).
Видно что у игрока вращение происходит сглажено(не плавно! а именно сглажено), на дроне я уже замучался, перепробовал все свои варианты, этот вариант более менее, но всё-равно видно жесткость при вращении. Это я попробовал применить как-бы сглаживание, которое применяю на пушках при их поворотах, плавный разгон и плавная остановка. Получше, но все равно не то, жесткость заметно, на пушках вид со стороны, поэтому там такое не критично вообще, а здесь камера - все косяки сразу в глаза бросаются.

Поворачиваю изменением углов. Движения прямо, назад или стрейфом это я сделал векторами, векторами там всё отлично, сглаживание работает на ура, но при повороте углов не соображу как можно сделать.

Для примера - в юнити есть лерп(и её разновидности) для такого вида сглаживаний, а в этом движке такого нет!
По какому принципу, точно, этот лерп работает я тоже не знаю. Я так понял что это линейная интерполяция(как на станках с ЧПУ), но у меня и так шаг мизерный, куда еще меньше-то. Должно по идее работать но не работает.

Страницы: 1 2
ПрограммированиеФорумФизика