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() не сделать.