| Клиент-Сервер перемещение игрока C# | 
|  | 
| 
| 35363 | Дата: Вторник, 28 Августа 2018, 16:19 | Сообщение # 1 |  |   участник Сейчас нет на сайте | Есть 2 трехмерных вектора: 1. Вектор позиции - хранит координату положения игрока в мире, по нажатию на W или S меняет координату по X на 1 шаг в плюс и минус соответственно
 2. Вектор поворота - хранит координату разворота игрока, по нажатию A или D так же меняет координату но по оси Y.
 Векторы хранятся на стороне сервера, как и вычисления над ними, по нажатию кнопки клиентом отправляются ему. Заполняют поля inst.transform.position, inst.transform.rotation, где inst объект игрока. Отправлять данные со стороны клиента о его позиции не предлагать.
 Вопрос, как воспользовавшись вышеозначенными векторами перестать летать только по оси X, а начать учитывать поворот игрока
 
 Если ничего не получается, а до этого получалось -  необходимо вернутся в то состояние при котором все получалось!
 |  |  |  |  | 
| 
| vampir0305 | Дата: Вторник, 28 Августа 2018, 16:43 | Сообщение # 2 |  |   Unity C# Programmer Сейчас нет на сайте | А ты посмотри как делается управление от первого лица в юнити. К вектору текущей позиции прибавляется вектор направления камеры или самого персонажа. То есть на клиенте была нажата клавиша влево, на сервер приходит запрос с сообщением "влево" и сервер к делает так: Player.position.x - 5f. Если надо вперёд то: Player.position.x + координата направления игрока. Но чтобы работало всё как в одиночной игре от первого лица, то нужно отправлять с клиента серверу вектор направления например камеры. И на сервере к вектору позиции прибавлять вектор камеры пришедший от игрока. Тогда всё будет работать.
 
 Красочная сюжетно-ориентированная игра-головоломка
 |  |  |  |  | 
| 
| drcrack | Дата: Вторник, 28 Августа 2018, 18:52 | Сообщение # 3 |  | старожил Сейчас нет на сайте | Цитата  хранит координату разворота игрока
 Цитата  + координата направления игрока.вы щаз о чем вообще? что еще за координата поворота, угол что ли?
 
 Тс, твою задачу конечно можно решить по-тупому через синус-косинус, но я могу предположить тебе все равно понадобится нормальная математика на сервере
 https://github.com/ManojLakshan/monogame/tree/master/MonoGame.Framework
 Вот тут можно найти Vector3, Quaternion и вообще все что нужно
 
 
 Сообщение отредактировал drcrack - Вторник, 28 Августа 2018, 18:55 |  |  |  |  | 
| 
| vampir0305 | Дата: Среда, 29 Августа 2018, 06:52 | Сообщение # 4 |  |   Unity C# Programmer Сейчас нет на сайте | drcrack, Я имел в виду это: На клиенте была нажата клавиша W, формируется запрос в котором клиент передаёт на сервер команду "forward", и вектор направления камеры - cam.transform.forward, но так как передать готовый вектор нельзя, будем передавать его компоненты x, y, z. То есть вот так: cam.transform.forward.x, cam.transform.forward.y, cam.transform.forward.z. На сервер приходит запрос от клиента с командой forward и вектором направления камеры. Сервер берёт и к текущей позиции игрока, хранящейся на сервере, прибавляет вектор, пришедший с клиента.
 То есть так: Position.x + cam.transform.forward.x, Position.y + cam.transform.forward.y, Position.z + cam.transform.forward.z.
 И новую позицию отсылает клиенту и другим клиентам.
 На самом деле выглядеть код будет примерно так: Position.x + newPos.x, Position.y + newPos.y, Position.z + newPos.z.
 Где Position - позиция игрока на сервере. newPos - переменная в которую записывается вектор, пришедший с клиента.
 Я делал именно так на фотоне и у меня всё работает.
 
 Красочная сюжетно-ориентированная игра-головоломка
 |  |  |  |  |