Показать сообщение отдельно
Старый 06.05.2015, 13:47   #128
Nex
Гигант индустрии
 
Аватар для Nex
 
Регистрация: 13.09.2008
Сообщений: 2,893
Написано 1,185 полезных сообщений
(для 3,298 пользователей)
Ответ: Передача переменной в метод

Сообщение от EvilOkta Посмотреть сообщение
Снова вопрос для размышлений. Думаю над реализацией поршневого механизма, но интересует какой подход выбрать. В чем суть:

Зеленым показан объект, который нужно толкнуть поршнем. Поршень обозначен серым и синим. Синяя часть анимирована. Постарался изобразить начало и конец анимации.
Теперь вопрос: как мне привязать перемещение объекта к анимации таким образом, чтобы стенка поршня не проходила через объект и двигалась вместе с объектом? Просто пока не понятно как с помощью анимации одного объекта синхронизировать перемещение другого. или только на глаз подгонкой скорости анимации?
Сам объект у меня перемещается с помощью собственной анимации, как раз была идея как-то это совместить с анимацией поршня, чтобы смотрелось адекватно.

PS. Можно тему переименовать в что-то типа "Проблемы разработки от EvilOkta"? А то название темы уже не актуально )

PPS. предвидя вопросы, сразу отвечу - нет, не майнкрафт )) даже близко ))
Используй Bounds - http://docs.unity3d.com/ScriptReference/Bounds.html
Проверяй есть ли пересечение через "объект.bounds.Contains" и дальше двигай как тебе надо. Можно даже без коллайдеров использовать. Проблема будет только с тем, что надо учитывать повороты объектов.

Я этот момент учел при помощи такого говнокода:
		_Point[0] = new Vector3(_colliderTr.bounds.center.x + _colliderTr.bounds.size.x/2, _transform.position.y, _colliderTr.bounds.center.z + _colliderTr.bounds.size.z/2);
		_Point[1] = new Vector3(_colliderTr.bounds.center.x - _colliderTr.bounds.size.x/2, _transform.position.y, _colliderTr.bounds.center.z + _colliderTr.bounds.size.z/2);
		_Point[2] = new Vector3(_colliderTr.bounds.center.x - _colliderTr.bounds.size.x/2, _transform.position.y, _colliderTr.bounds.center.z - _colliderTr.bounds.size.z/2);
		_Point[3] = new Vector3(_colliderTr.bounds.center.x + _colliderTr.bounds.size.x/2, _transform.position.y, _colliderTr.bounds.center.z - _colliderTr.bounds.size.z/2);
			
		if( _collider.bounds.Contains(_Point[0])&&_collider.bounds.Contains(_Point[1])&&_collider.bounds.Contains(_Point[2])&&_collider.bounds.Contains(_Point[3]) ){
			//есть пересечение
		}else{
			//нет пересечения
		}
Провека пересечения MeshRender и BoxCollider.
_collider был BoxCollider объекта на котором висит скрипт.
_colliderTr был MeshRenderer проверяемого объекта.
(Offline)
 
Ответить с цитированием
Сообщение было полезно следующим пользователям:
EvilOkta (06.05.2015)