正如标题所问,为什么这段代码是可能的?

if (Physics2D.Raycast(...)) {

}

即使方法本身返回 RaycastHit2D ?

最佳回复

The answer to questions about the Unity API can generally be found in the docs :

RaycastHit2D实现了一个隐式转换运算符,转换为bool,该运算符检查[碰撞器]属性,允许将其用作检查是否发生碰撞的简单条件。

这意味着 RaycastHit2D 结构的代码在引擎盖下看起来像这样:

public struct RayCastHit2D {
    public Collider2D collider;

    public static implicit operator bool(RaycastHit2D hit) {
        return hit.collider != null;
    }
}

这对编译器说"无论你在哪里看到 RaycastHit2D 像布尔值一样使用,您可以通过运行此方法(返回 true 如果对撞机撞到了 false 否则),而不要求用户显式键入转换或比较。