Unity DragNDrop 3d объектов
изучаю unity и хочу реализовать dran and drop систему для 3d объектов, иcпользую raycast, все работает, объект перетаскивается, однако при быстром перемещении мыши объект , как-будто слетает. Для больше понимания проблемы оставляю ссылку на видео
public class DragAndDrop : MonoBehaviour
{
Ray ray;
RaycastHit hit;
private void Start()
{
}
private void Update()
{
if (Input.GetMouseButton(0))
{
ray = Camera.main.ScreenPointToRay(Input.mousePosition);
if(Physics.Raycast(ray, out hit))
{
if (hit.collider.gameObject.GetComponent<Selectable>() != null)
{
hit.collider.gameObject.transform.position = new Vector3(hit.point.x, hit.point.y, hit.collider.gameObject.transform.position.z);
print("Координаты: " + hit.point + " " + "Объект: " + hit.collider.gameObject.name);
}
else
{
print("Это не куб");
}
}
}
}
}
Ответы (1 шт):
Проблема в этой строчке: if (hit.collider.gameObject.GetComponent<Selectable>() != null). Пока у вас нажата ЛКМ, вы пытаетесь получить компонент, но, если его нет, то двигать нечего и ничего не происходит.
Можете закэшировать объект, который пытаетесь получить и обнулять его, когда кнопка мыши будет отпущена. Таким образом вы не будете каждый кадр делать вызов GetComponent, а будете брать объект из кэша, если он существует.
Также, вместо GetComponent<Selectable>() != null можете использовать TryGetComponent, который вернет и true, когда компонент есть и сам компонент