Привязка фигур в игре

8

Я пытаюсь понять, как соединять фигуры, чтобы игрок мог перемещаться по холсту.

введите описание изображения здесь

Когда квадрат приближается к другому объекту, я хочу вытянуть эту фигуру (учитывая определенную близость) и сделать так, чтобы она идеально привязывалась к краю объекта.

Правила:

  • Только если края параллельны друг другу
  • Если дочерний квадрат (перетаскиваемый) составляет половину размера родительского квадрата (к которому приближаются), то средняя точка края родительского квадрата может определить, привязывается ли дочерний элемент влево / вправо / вверх / вниз

введите описание изображения здесь

Кто-нибудь сделал что-нибудь подобное? Я использую с # и единство. Приветствия.

dolyth
источник

Ответы:

7

Я написал прототип чего-то вроде этого. Я создал несколько ресурсов, которые выглядели так:

введите описание изображения здесь

Таким образом, в основном этот объект «ShipPart» имеет заранее определенные точки привязки. Эти четыре коллайдера помогут определить, пытаетесь ли вы привязать объект к месту или нет.

Затем я создал класс ShipPart, который содержит некоторые вещи, такие как:

//Neighbor information
ShipPart Left, Right, Top, Bottom;

//current rotation
float Rotation;

//The ship core it is attached to
Ship Ship;

//The coordinates in references to the ship core
int X ;
int Y ;

Он также содержит функции и свойства, которые помогут с перетаскиванием и проверкой состояния соседних ShipParts.

Важной функцией является функция Attach (), которая подключит этот ShipPart к вашему кораблю.

public void Attach(Ship ship, int x, int y)
{
    GetComponent<Rigidbody2D> ().isKinematic = true;

    Ship = ship;

    X = x;
    Y = y;

    transform.parent = Ship.transform;
    transform.position = Vector2.zero;
    transform.localPosition = new Vector2(x, -y);
}

Затем, наконец, класс Ship, отслеживает вашу базовую часть, все прикрепленные части, все данные о кораблях обрабатываются здесь. Вы можете raycast для частей корабля в этом классе. Проверьте ту часть, которую вы сейчас перетаскиваете, чтобы увидеть, сталкивается ли какой-либо из коллайдеров с другими частями.

Если есть столкновение, проверьте, находится ли вращение в пределах указанного порогового значения, а затем зафиксируйте его на месте.

Это на самом деле намного сложнее объяснить, чем я думал. Дайте мне знать, если у вас есть вопросы, и я подробно остановлюсь на том, что вам нужно.

введите описание изображения здесь

jgallant
источник
Спасибо за хорошо проиллюстрированный ответ - у меня есть вопрос :), предопределенные точки привязки, эти точки, которые вы проверяете на близость? Затем, когда они рядом, появляется зеленое поле ... значит, если вы отпустите сейчас, тогда будет сделан щелчок?
Долит
1
Да, зеленые поля должны указывать, что привязка доступна и где она будет привязана. Коллайдер существует в той же области и используется для определения, можете ли вы привязать или нет. Я выполняю радиопередачу в четырех точках, активно перемещая деталь, чтобы определить, перекрываем ли мы точку привязки или нет - и, насколько мы находимся, насколько близко мы к этому объекту.
jgallant
как вы получаете зелёные прямоугольники, появляющиеся при щелчке? У вас есть где-нибудь все скрипты в github? Спасибо, Мелисса
MContributor