2015-06-14 2 views
1

Написание сценария C#, позволяющего игроку создавать простые блоки. По этой причине я ударяю рейкастов вперед от игры. Когда луч ударил какой-то объект - я получаю коллизионные мирские соглашения с hit.point Если я создаю экземпляр строительного блока для этих координат - он будет создан, перекрываясь с другими объектами. Я должен изменить координаты.Unity3D Raycasting

enter image description here

Как я могу получить точку, лежавший, как показано на рисунке? Это позволит мне вычислить координаты созданных блоков.

ответ

3

Вы можете взять свойство point RaycastHit и перемещаться по пересеченной поверхности, равным нормали к размеру вашего блока (половина его ширины, если это куб единицы, это будет 0.5f) ; что-то вроде этого:

if (Input.GetMouseButtonDown (0)) { 
    Ray ray = Camera.main.ScreenPointToRay (Input.mousePosition); 
    RaycastHit hit; 
    if (Physics.Raycast (ray, out hit)) { 
     Instantiate (prefab, hit.point + hit.normal * blockExtent, hit.transform.rotation); 
    } 
} 

Это будет создать экземпляр нового блока в точке пересечения в raycast в (вы должны вычислить центр пересекаемых лицо, если вы хотите их выровнять точно), и унаследовать вращение пересеченный GameObject.

Обратите внимание, что это не предотвратит появление нового блока внутри существующего блока; он просто убережет его от нереста внутри блока, с которым вы raycasted.

+0

hit.point + hit.normal Я пробовал это. Он работает для других кубов, но не для самолетов или других крупных объектов. – Bob

+0

Ох ... Это работает. Я немного смутился. Я уже пробовал это, но он не сработал до – Bob

+0

. Вы умножали точку на размер сборной части (или какое-то другое вычисленное смещение)? И, честно говоря, ваш вопрос был конкретно о блоках, а не о планах или других объектах. – Problematic

Смежные вопросы