Клиент-Сервер перемещение игрока 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 - переменная в которую записывается вектор, пришедший с клиента. Я делал именно так на фотоне и у меня всё работает.
Красочная сюжетно-ориентированная игра-головоломка
|
|
| |