Задать вопрос
Ответы пользователя по тегу C#
  • Что я не так делаю с интерфейсами?

    @alkska
    Unity developer
    Котик конечно крутой, СОЛИДно объяснил тебе за все, но ты никогда так не достанешь интерфейс с объекта...
    Тебе не понравилось, что интерфейс не показывется в инспекторе - так объяви 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 и не паришься -все безопасно
    Ответ написан