Как вернуть изометрическое положение в орфографическое?C#

Место общения программистов C#
Ответить
Anonymous
 Как вернуть изометрическое положение в орфографическое?

Сообщение Anonymous »

Я изо всех сил пытаюсь получить обратную функцию от своей функции, чтобы получить мировую позицию из ячейки сетки:

Код: Выделить всё

public class WorldPosition : IMessageSerializable
{
private Vector2Int _map;
private Vector2Int _cell;
private Vector2Int _world;

// Getter setter
// other codes...
public Vector2Int World { get => _world; set { _world = value; UpdateMapAndCell(); } }
// other codes...
public Vector2 ToUnityPosition()
{
float unityX = (World.X * 0.5f - World.Y * 0.5f);
float unityY = 0.25f + (World.X * 0.25f + World.Y * 0.25f);
return new Vector2(unityX, unityY);
}
}
Для unityY 0,25f в начале — это смещение по центру ячейки. Я не знаю, как создать функцию public ToWorldPosition(Vector2 unityPosition);
Я пробовал 3 часа подряд и начал сходить с ума...
Мне это нужно, чтобы обновить положение моего игрока, пока он путешествует между двумя точками.
[img]https://i.stack .imgur.com/6Flim.png[/img]

На картинке мы видим:
синяя линия — это ось X: перейти к ячейке X+1 в моем едином пространстве. это +0,5x,+0,25y.

красная линия — ось Y: чтобы перейти к ячейке Y+1 в моем единичном пространстве, это -0,5x,+0,25y .

Итак, чтобы получить позицию единства, нам нужно задействовать как X, так и Y из сетки (мировой вектор).

Для X: мы добавляем World.X * 0.5f и мы вычитаем World.Y * 0,5f, когда Y движется в обратном направлении (это базовый +x -y изометрического преобразования)

Для Y : World.X * 0,25f + World.Y * 0,25f, потому что X и Y растут. 0,25f в начале соответствует смещению, поскольку мой игрок находится за пределами карты при значении 0,0.

Подробнее здесь: https://stackoverflow.com/questions/782 ... c-position
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C#»