Страница 1 из 1

Перенос точки из одной плоскости в другую

СообщениеДобавлено: 24 апр 2019, 18:06
LoneRay
День добрый. Подскажите пожалуйста как перенести точку из поля Terrain (плоскость 1) с координатами x,y,z в объект имеющий форму квадрата (плоскость 2) с координатами x,y.

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

Re: Перенос точки из одной плоскости в другую

СообщениеДобавлено: 24 апр 2019, 18:19
~AvA~
Ну, можно воспользоваться гтовыми решениями для MiniMap например..
Не уверен, есть ли бесплатные решения, но всегда можно поискать! :)

Re: Перенос точки из одной плоскости в другую

СообщениеДобавлено: 24 апр 2019, 18:19
1max1
MapX = хPlayer / 8000 * 91;
MapY = zPlayer / 8000 * 91;
Естественно отсчет координат от нуля, если не от нуля, то надо добавлять оффсет к координатам игрока.

Re: Перенос точки из одной плоскости в другую

СообщениеДобавлено: 24 апр 2019, 18:25
LoneRay
~AvA~ писал(а):Ну, можно воспользоваться гтовыми решениями для MiniMap например..
Не уверен, есть ли бесплатные решения, но всегда можно поискать! :)

Нашёл примеры с миникартами, но тут одна проблема с моей стороны, у меня миникарта "отображает" весь размер карты и указывает позицию игрока, поэтому подход как MiniMap не пойдёт к сожалению. Пример я смотрел с Camera

Re: Перенос точки из одной плоскости в другую

СообщениеДобавлено: 24 апр 2019, 18:28
LoneRay
1max1 писал(а):MapX = хPlayer / 8000 * 91;
MapY = zPlayer / 8000 * 91;
Естественно отсчет координат от нуля, если не от нуля, то надо добавлять оффсет к координатам игрока.

Есть небольшое смещение(
https://1drv.ms/u/s!Ag79bYH4D5GimZBPUmu6aAafLIJQGg

Центр перса 4500х4500
Центр перса на миникарте 43,75х43,75

Re: Перенос точки из одной плоскости в другую

СообщениеДобавлено: 24 апр 2019, 18:38
LoneRay
1max1 писал(а):MapX = хPlayer / 8000 * 91;
MapY = zPlayer / 8000 * 91;
Естественно отсчет координат от нуля, если не от нуля, то надо добавлять оффсет к координатам игрока.

Типо offset = Player.transform.position.last-Player.transform.position.old;
MapX и MapY + offset;

или я что-то не так понимаю?

Re: Перенос точки из одной плоскости в другую

СообщениеДобавлено: 24 апр 2019, 18:41
1max1
Может ты с размерами напутал, может канвас не так отображает... :-?
Оффсет, в том смысле что у тебя карта должна начинаться в точке (0,0,0). То есть ее левый нижний угол должен быть в нулевой координате, если же нет, то либо поставь ее туда, либо придется делать прибавление к координате игрока.
MapX = (хPlayer + offsetX) / 8000 * 91;
MapY = (zPlayer + offsetZ) / 8000 * 91;

Re: Перенос точки из одной плоскости в другую

СообщениеДобавлено: 24 апр 2019, 18:46
LoneRay
1max1 писал(а):Может ты с размерами напутал, может канвас не так отображает... :-?
Оффсет, в том смысле что у тебя карта должна начинаться в точке (0,0,0). То есть ее левый нижний угол должен быть в нулевой координате, если же нет, то либо поставь ее туда, либо придется делать прибавление к координате игрока.
MapX = (хPlayer + offsetX) / 8000 * 91;
MapY = (zPlayer + offsetZ) / 8000 * 91;

Миникарта с 0-91, а вот локация с 1000-9000

Re: Перенос точки из одной плоскости в другую

СообщениеДобавлено: 24 апр 2019, 18:48
1max1
а вот локация с 1000-9000

MapX = (хPlayer - 1000) / 8000 * 91;
MapY = (zPlayer - 1000) / 8000 * 91;

Re: Перенос точки из одной плоскости в другую

СообщениеДобавлено: 24 апр 2019, 18:49
LoneRay
1max1 писал(а):Может ты с размерами напутал, может канвас не так отображает... :-?
Оффсет, в том смысле что у тебя карта должна начинаться в точке (0,0,0). То есть ее левый нижний угол должен быть в нулевой координате, если же нет, то либо поставь ее туда, либо придется делать прибавление к координате игрока.
MapX = (хPlayer + offsetX) / 8000 * 91;
MapY = (zPlayer + offsetZ) / 8000 * 91;

Попробовал написать так offset(1000) и вроде норм, но вот чуть чуть смещение заметно с центра
var MapX = (transform.position.x - 1000) / 8000 * 91;
var MapY = (transform.position.z - 1000) / 8000 * 91;
UiMap.GetComponent<RectTransform>().anchoredPosition = new Vector2(MapX, MapY);
https://1drv.ms/u/s!Ag79bYH4D5GimZBV3W7CnukrnzXNbQ

Re: Перенос точки из одной плоскости в другую

СообщениеДобавлено: 24 апр 2019, 18:55
1max1
anchoredPosition... Не уверен что это правильно.
Настрой якорь в левый нижний угол и не трогай больше.
Координаты задавай так:
Синтаксис:
Используется csharp
UiMap.GetComponent<RectTransform>().position = new Vector2(MapX, MapY);

Re: Перенос точки из одной плоскости в другую

СообщениеДобавлено: 24 апр 2019, 19:46
LoneRay
1max1 писал(а):anchoredPosition... Не уверен что это правильно.
Настрой якорь в левый нижний угол и не трогай больше.
Координаты задавай так:
Синтаксис:
Используется csharp
UiMap.GetComponent<RectTransform>().position = new Vector2(MapX, MapY);

Эх, не выходит(
Якорь Map нижний правый угол по UI, MapObject(UiMap) нижний левый по Map и всё равно почему центр смещён, по краям вроде как более менее а вот центр почему то смещён и хз чё делать(

Даже меняя на левый нижний всё равно так же что с position что с anchoredPosition (

Re: Перенос точки из одной плоскости в другую

СообщениеДобавлено: 24 апр 2019, 20:12
LoneRay
Сделал короче. Вот что вышло

Синтаксис:
Используется csharp
var playerP = transform.position;
var playerS = transform.localScale;
var mapX = (playerP.x - 1000 - playerS.x) / 8000 * 97;
var mapY = (playerP.z - 1000 - playerS.x) / 8000 * 97;
UiMap.GetComponent<RectTransform>().anchoredPosition = new Vector2(mapX, mapY);


Спасибо всем кто помог)