Пятница, 29 Ноября 2024, 21:50

Приветствую Вас Гость

[ Новые сообщения · Игроделы · Правила · Поиск ]
  • Страница 1 из 1
  • 1
Клиент-Сервер перемещение игрока 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 - переменная в которую записывается вектор, пришедший с клиента.
Я делал именно так на фотоне и у меня всё работает.


Красочная сюжетно-ориентированная игра-головоломка
  • Страница 1 из 1
  • 1
Поиск:

Все права сохранены. GcUp.ru © 2008-2024 Рейтинг