Я задаю еще один вопрос - перетаскивание мышью (я использую Unity с C #), но с менее частой конкретной деталью: наличие препятствий в середине пути, по которому происходит перетаскивание (3D-пространство, а не 2D) ,
Позволь мне объяснить. Предположим, у меня есть самолет, по которому я хочу перетащить куб с именем «obj». Это легко. Вот моя простая реализация для этого:
void Update () {
Ray ray = Camera.main.ScreenPointToRay(Input.mousePosition);
RaycastHit hit;
if(Physics.Raycast(ray, out hit, 1000000))
obj.transform.position = new Vector3(hit.point.x,0.25F,hit.point.z);
}
Оно работает. Однако предположим, что у меня также есть несколько других кубов над плоскостью, которые являются препятствиями. Очевидно, что когда игрок перемещает «объект» по плоскости, такое движение должно быть заблокировано препятствиями. И затем, сталкиваясь с препятствиями, «объект» должен двигаться только по обрезанным сторонам этого препятствия. Если мышь перемещается и «obj» перестает сталкиваться с препятствиями, свободное движение в стиле перетаскивания возобновляется снова.
Чтобы усложнить задачу, я изо всех сил стараюсь добиться этого без использования компонентов RigidBody на препятствиях (перетаскиваемый объект может иметь это). Любые идеи о том, что является наиболее эффективным способом достижения этого? Большое спасибо!
РЕДАКТИРОВАТЬ: Комментаторы обратили мое внимание, что я должен упомянуть, что объекты могут вращаться при привязке.
РЕДАКТИРОВАТЬ 2: Учитывая сложность первоначальной формулировки, я изменил вопрос, разрешающий использование компонентов Rigidbody на перетаскиваемых объектах. Решение просто не может использовать компоненты Rigidbody на препятствиях.