Вы ничего не делаете с позицией объектов, поэтому она будет появляться в начале координат.
Не видя ваш проект, трудно угадать, что ваша игра требует для размещения поведения, я предполагаю, что у вас есть некоторыеокружение, в которое вы хотите поместить его, и это легко сделать с помощью Physics.Raycast()
. Но если вы не находитесь в какой-либо среде, вы можете запустить луч из положения мыши и спроецировать его на произвольную величину вперед от камеры и поместить объект туда для хорошего эффекта.
Этого фрагмента должно быть достаточнодля этого:
public float raycastDistance = 10f;
public float projectDistance = 4f;
public void OnEndDrag(PointerEventData eventData)
{
var spawned = Instantiate(prefab);
var ray = Camera.main.ScreenPointToRay(eventData.position);
if (Physics.Raycast(ray, out RaycastHit hit, raycastDistance)
{
spawned.transform.position = hit.point;
}
else
{
spawned.transform.position = Camera.main.transform.position + (ray * projectDistance);
}
}
Если вы предпочитаете, вы можете обновить позицию порожденного объекта в OnDrag()
вместо того, чтобы просто установить его в OnDragEnd()
, что может выглядеть довольно неплохо, если вы интерполируете положение объектанемного, как мышь двигается.