Суббота, 09 Ноября 2024, 04:33

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

[ Новые сообщения · Игроделы · Правила · Поиск ]
  • Страница 1 из 1
  • 1
Выравнивание при стыковке блоков
GameCoder123Дата: Понедельник, 11 Апреля 2016, 15:22 | Сообщение # 1
был не раз
Сейчас нет на сайте
Добрый день!
Пытаюсь реализовать Lego-подобный конструктор.
Сделал префаб: куб с rigidbody и скриптом:

Код

using UnityEngine; using System.Collections;

[RequireComponent(typeof(BoxCollider))]
[RequireComponent(typeof(Rigidbody))]
public class StickScript : MonoBehaviour
{
private Rigidbody myRigid;
public void Start()
{

myRigid = gameObject.GetComponent<Rigidbody>();
}

public void OnCollisionEnter(Collision collision)
{
// У всех префабов есть этот тег
if (collision.gameObject.tag != "Sticky")
return;

// Если другой объект нас не присоединил
foreach (FixedJoint fj in collision.gameObject.GetComponents<FixedJoint>())
{
if (fj.connectedBody == myRigid)
return;
}

var otherRigid = collision.gameObject.GetComponent<Rigidbody>();

// Если не присоединили другой объект
foreach (FixedJoint fj in gameObject.GetComponents<FixedJoint>())
{
if (fj.connectedBody == otherRigid)
return;
}

// Соединяем

collision.gameObject.transform.rotation = gameObject.transform.rotation; // Поворачиваем
var joint = gameObject.AddComponent<FixedJoint>();
joint.connectedBody = collision.rigidbody;

}
}



Поворот перед прикреплением нужен для того, чтобы корректно их склеить...
Не могли бы вы подсказать, какие нужно выполнить преобразования, чтобы при прикреплении не было проблемы со смещением?

В дальнейшем планируется, что блоки можно будет маштабировать, не могли бы вы также подсказать: как это учесть?
P. S. Это не клон Minecraft. Блоки не привязаны к сетке, они могут лишь склеиваться по граням
LertmindДата: Понедельник, 11 Апреля 2016, 19:11 | Сообщение # 2
заслуженный участник
Сейчас нет на сайте
Для начала сожги всё, что написал. FixedJoint здесь вообще не сдался.
Если хочешь как у Lego, то надо как раз по сетки, только размер сетки это выступ у блока. Посмотри их программу для создания.
Если хочешь прикреплять их в любом месте на грани, то это уже не Lego, а просто блок на блоке, но без физики.
GameCoder123Дата: Понедельник, 11 Апреля 2016, 22:39 | Сообщение # 3
был не раз
Сейчас нет на сайте
Под Lego я подразумевал, что из блоков можно получать конструкции. В реальном мире LEGO не привязано к сетке, как и у меня.
Как Вы предлагаете прикреплять блок на блоке без Fixed Joint? в противном случае, придется строить иерархию. Если я построю иерархию, то ,гипотетически, может возникнуть ситуация цикла: (при определенной подборке последовательности соединений, окажется, что самый нижний элемент в иерархии присоединит к себе самый верхний, и тогда возникнут проблемы) - избежать этого можно запросто с помощью Joint-ов.
Кроме того, если я мышью начну перемещать нижний элемент в иерархии, то, если не писать доп. скриптов, он будет перемещаться без остальных кубиков. Это тоже не очень хорошо...

Не могли бы Вы привести решение (или хотя бы алгоритм), который исключает эти проблемы И не использует Fixed Joint?
  • Страница 1 из 1
  • 1
Поиск:

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