Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Unity3d > Уроки По <<Unity3d>> > Основы обнаружения столкновений


Автор: DEXINDROVER Фев 29 2016, 21:58
Основы обнаружения столкновений.


В уроке рассказывается как обнаружить столкновения (collisions) между объектами используя скрипты.


Создайте сцену как в предыдущем уроке или загрузите уже имеющуюся. Добавьте к ней еще один куб, растяните его по горизонтали в 5-6ть раз и по вертикали в 2а раза.


В этом уроке важны названия объектов. Назовите плоскость Floor, а куб представляющий стену Wall (Ваш К.О.)

В Project View нажмите на Create и выберете С# Script. Назовите его boxdrop. Дважды кликнув на скрипт вы откроете его в вашем редакторе скриптов (как правило, по умолчанию это MonoDevelop. У автора статьи это Visual Studio 2010 под Windows или Textmate под MacOs).

Обратите внимание, что название класса всегда должно совпадать с названием скрипта(регистр букв тоже имеет значение):

//Важно! Названия основного класса всегда должно совпадать с названием файла скрипта
public class boxdrop : MonoBehaviour {


По умолчанию Unity создает каркас для C# скрипта. Удалите из тела класса boxdrop все содержимое и замените следующим:

// Метод вызываемый при столкновении объекта
void OnCollisionEnter() {
Debug.Log("Hit Something"); // Передаем сообщение в консоль Unity
}


Функция OnCollisionEnter определяет столкновение объекта с другими объектами. А статический метод Log класса Debug пишет сообщение в консоль Unity. После сохранения скрипта, добавьте его как компонент для падающего куба.
Теперь если вы нажмете Play, в момент когда куб коснется пола консоль выдаст соответствующее сообщение. Открыть окно консоли можно комбинацией ctrl + shift + c в Windows или cmd + shift + c в MacOs. Последнее консольное сообщение отображается в статус баре проекта (внизу окна).
user posted image


Причем сообщение будет выдаваться при каждом столкновении.
Для того, чтобы понять с каким именно объектом столкнулся наш куб, мы будем брать значение параметра класса Collision, которое будет принимать метод OnCollisionEnter:

// Теперь метод принимает объект класса Collision, с которым происходит столкновение
void OnCollisionEnter(Collision myCollision) {
// определение столкновения с двумя разноименными объектами
if (myCollision.gameObject.name == "Floor") {
// Обращаемся к имени объекта с которым столкнулись
Debug.Log("Hit the floor");
}
else if (myCollision.gameObject.name == "Wall") {
Debug.Log("Hit the wall");
}
}
}


Нажмите Play и после того как ваш куб коснется несколько раз стены и пола остановите игру и откройте консоль. Теперь при столкновении только со стеной или полом будет выдаваться соответствующие названию объекта сообщение.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)