Показать сообщение отдельно
Старый 10.01.2012, 22:40   #184
Aikon
ПроЭктировщик
 
Регистрация: 12.02.2011
Сообщений: 131
Написано 23 полезных сообщений
(для 52 пользователей)
Ответ: Вопросы от новичка

WISHMASTER35, странно, что не ищет. Ты уверен, что компонент висит? Может в имени ошибка? Код в студию.

Расскажу про свой топорный метод решения схожей задачи:
1. Создаем класс
class RayReceiver  : MonoBehaviour {
	public virtual void OnRay()
	{
		// тут помещаем стандартный обработчик, например уничтожить объект
	}
}
Теперь допустим есть несколько разных классов, которые должны принимать сообщение о приходящем луче.
Тогда класс наследуем не от MonoBehaviour, а от RayRaceiver
class TestClass : RayReceiver   {
	// можно не писать, если устроит стандартный
	public override void OnRay()
	{
		// тут помещается обработчик, уникальный для класса. Позже можем вызвать родительский, если надо
	}
}
Где то в обработчиках нажатия
if (Input.GetMouseButtonDown(0))
{
	Ray ray = mlCamera.ScreenPointToRay(Input.mousePosition);
	RaycastHit hit;
	if (!Physics.Raycast(ray, out hit))
		return;
	RayReceiver rr = hit.collider.gameObject.GetComponent<RayReceiver>();
	if (rr != null)
		rr.OnRay();
}
C# вроде запрещает множественное наследование, но поскольку у меня иерархия объектов простая, как и сама задача, то такое вот решение меня вполне устраивает.


P.S. Кстати нашел баг: допустим лежит кубик с RigidBody на другом c BoxCollider, то сообщение OnCollissionStay через некоторое время перестает приходить, пока кубику с RigidBody WakeUp() не сделать.
(Offline)
 
Ответить с цитированием