Добрый день!
Пытаюсь реализовать 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. Блоки не привязаны к сетке, они могут лишь склеиваться по граням