【问题标题】:Why Collider2D.Raycast & Collider.Raycast are so different?为什么 Collider2D.Raycast 和 Collider.Raycast 如此不同?
【发布时间】:2018-04-23 13:33:16
【问题描述】:

Collider.Raycast -> 投射一条忽略除此之外的所有碰撞器的射线。

Collider2D.Raycast -> 从对撞机位置开始将光线投射到场景中,忽略对撞机本身。

我想像 Collider.Raycast 一样使用它,它“忽略除此之外的所有内容”,但我现在正在使用 Collider2D,我需要投射一个光线投射并检查它是否仅使用指定的 Collider2D 命中,或者是否有任何更好的方法?

【问题讨论】:

    标签: unity3d raycasting collider


    【解决方案1】:

    对于 2D 中的 Raycast,您最好使用 Physics2D.Raycast 方法

    (来自Unity Documentation)

    RaycastHit2D hit = Physics2D.Raycast(transform.position, -Vector2.up);
    
    if (hit.collider != null) {
        float distance = Mathf.Abs(hit.point.y - transform.position.y);
        float heightError = floatHeight - distance;
        float force = liftForce * heightError - rb2D.velocity.y * damping;
        rb2D.AddForce(Vector3.up * force);
    }
    

    这应该为您提供所需的所有文档。 Physics2D 类还具有许多有用的相关功能,例如圆形投射、线投射以及有关如何忽略光线投射中某些层的信息。

    为了节省您的时间,这里是完整的 Physics2D.Raycast 方法,包括可选变量。

    public static RaycastHit2D Raycast(Vector2 origin, Vector2 direction, float distance = Mathf.Infinity, int layerMask = DefaultRaycastLayers, float minDepth = -Mathf.Infinity, float maxDepth = Mathf.Infinity);
    

    祝你的项目好运!

    【讨论】:

    • 感谢您的快速回复!但是,这并没有提供仅像 Collider.Raycast 这样的指定对撞机进行光线投射的功能,这正是我所需要的。
    猜你喜欢
    • 2016-01-06
    • 1970-01-01
    • 2019-11-16
    • 1970-01-01
    • 2013-04-01
    • 2015-10-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多