Котик конечно крутой, СОЛИДно объяснил тебе за все, но ты никогда так не достанешь интерфейс с объекта...
Тебе не понравилось, что интерфейс не показывется в инспекторе - так объяви gameObject
и потом в awake доставай свой интерфейс вот так :
gameObg = GetComponent(typeof(IHealth)) as IHealth;
а еще не нужно доставать компоненты в рантайме - пиши отдельные скрипты детекторы
using System;
using UnityEngine;
[RequireComponent(typeof(BoxCollider))]
public class PlayerDetector : MonoBehaviour
{
internal event Action OnPlayerEnter, OnPlayerExit, OnPlayerStay;
protected virtual void OnTriggerEnter(Collider other)
{
if (OnPlayerEnter != null)
if (IsPlayer(other.gameObject))
{
OnPlayerEnter.Invoke();
}
}
protected virtual void OnTriggerExit(Collider other)
{
if (OnPlayerExit != null)
if (IsPlayer(other.gameObject))
{
OnPlayerExit.Invoke();
}
}
protected virtual void OnTriggerStay(Collider other)
{
if (OnPlayerStay!=null)
if (IsPlayer(other.gameObject))
{
OnPlayerStay.Invoke();
}
}
public static bool IsPlayer(GameObject ob)
{
if (ob.CompareTag("Player"))
return true;
return false;
}
}
Метишь тегом своим рыцаря и кидаешь скрипт на объект который может наносить урон, подписываешься на OnPlayerEnter в скрипте который наносит Damage и не паришься -все безопасно