if (getcomponent <Interface>()) возвращает ошибку. if (getcomponent <Class>()) работает нормально. какая разница? - PullRequest
0 голосов
/ 06 октября 2019

В единстве я использую функцию OnTriggerEnter. попробуйте оператор if, чтобы увидеть, столкнулся ли я с объектом, используя collider.gameobject.getcomponent <> ();если компонент является классом, он работает нормально, если компонент является интерфейсом, он возвращает ошибку «не может неявно преобразовать тип взаимодействующий в bool» (взаимодействующий - это имя интерфейса). Совершенно новичок в программировании и любопытно, почему это проблема?

// код ошибки, выделенная ошибка - строка оператора if. интерактивным является интерфейс

private void OnTriggerEnter(Collider coll)
    {
        if (coll.gameObject.GetComponent<Interactable>())

    {
        Interactable interactable = coll.gameObject.GetComponent<Interactable>();
        interactable.CheckEffect(ability);
    }
}

// рабочий код, враг это класс

private void OnTriggerEnter(Collider coll)
{
    if (coll.gameObject.GetComponent<Enemy>())
    {
        Enemy enemy = coll.gameObject.GetComponent<Enemy>();

        if (enemy.need == objectType)
        {
            DoAction(enemy);
            enemy.AddEffect(this);
        }    }
}

1 Ответ

1 голос
/ 06 октября 2019

Каждый класс, унаследованный от UnityEngine.Object, имеет переопределение проверки нуля, что означает, что if(component) означает if (component != null) или if (gameobject) означает if(gameobject!= null), и это потому, что Unity также проверяет базовый указатель объекта C ++, который представляетC # фасад. Но ваш интерфейс не наследуется от UnityEngine.Object (в конце концов, это интерфейс), поэтому if(yourinterface) не имеет смысла для компилятора Unity, чтобы избавить себя от проблем и сохранить согласованность в вашем приложении / игре, всегда если if (x)! = null) независимо от того, является ли это UnityEngine.Object объектом или нет.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...