我正在统一使用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);
} }
}
答案 0 :(得分:1)
从UnityEngine.Object继承的每个类都具有覆盖null检查的覆盖,这意味着if(component)
意味着if (component != null)
或if (gameobject)
意味着if(gameobject!= null)
,这是因为unity也检查表示C#外观的基础C ++对象指针。但是您的界面并非继承自UnityEngine.Object
(毕竟是一个界面),因此if(yourinterface)
对unity的编译器没有意义,从而避免了麻烦并始终保持应用程序/游戏的一致性无论是否为UnityEngine.Object
对象,都执行if(x!= null)。