Напишите скрипт, который проверяет положение какого-либо другого объекта, и, если он достаточно близко, сделайте его дочерним и установите его локальное положение и поворот по умолчанию. Кроме того, отключите сценарий перетаскивания:
public class SnapToMe : MonoBehaviour
{
public GameObject target = null;
public float snapDistance = 1f;
void FixedUpdate()
{
if (target==null) return;
if ( Vector3.Distance(transform.position, target.transform.position) <= snapDistance) )
{
target.transform.parent = transform;
target.transform.localRotation = Quaternion.identity;
target.transform.localPosition = Vector3.zero;
target.GetComponent<DragObject>().enabled = false;
}
}
}
На объекте, который вы хотите выполнить привязку, добавьте дочерний объект, где должен выполняться привязка, и присоедините к нему сценарий привязки:
Bottle
└── Bottle snap point
└── SnapToMe
Затем, когда вы создадите колпачок, сообщите об этом моменту привязки:
Gameobject newCap = Instantiate(...);
Gameobject bottleSnapPoint = GameObject.Find(
"Bottle snap point"); // or some other way to get a reference to the snap point
SnapToMe snapper = bottleSnapPoint.GetComponent<SnapToMe>();
snapper.target = newCap;
snapper.snapDistance = 2f; //whatever is appropriate