【问题标题】:Raycast doesn't detect hitting object unity C# 2dRaycast 没有检测到击中物体的统一 C# 2d
【发布时间】:2016-12-05 18:47:35
【问题描述】:

对 Unity 还很陌生,过去几天我一直在玩 Raycasting。我遇到了这个问题,其中光线投射要表示的线没有检测到这种情况已经发生。因此,当 Raycast 线击中对象时,我希望它在控制台上简单地显示 HIT 以表明这是有效的。我有一种感觉,它不起作用的原因是由于我通过调试看到的线路和实际使用的线路不同。

代码是:

void rayCast()
    {
        if (player.transform.position.x <= enemy.transform.position.x)
        {
            RaycastHit2D hitLeft = Physics2D.Raycast(transform.position, -transform.right, rayDistance, 1 << LayerMask.NameToLayer("Player"));
            Vector3 left = transform.TransformDirection(Vector3.left);
            Debug.DrawRay(transform.position, left * rayDistance, Color.green);

            if (hitLeft.collider != null)
            {
                Debug.Log("Player is within range");
            }
            else
            {
                Debug.Log("out of range");
            }
        }


        if (player.transform.position.x >= enemy.transform.position.x)
        {
            RaycastHit2D hitRight = Physics2D.Raycast(transform.position, transform.right, rayDistance, 1 << LayerMask.NameToLayer("Player"));
            Vector3 right = transform.TransformDirection(Vector3.right);
            Debug.DrawRay(transform.position, right * rayDistance, Color.green);

            if (hitRight.collider != null)
            {
                Debug.Log("Player is within range");
            }
            else
            {
                Debug.Log("out of range");
            }
        }
    }

提前感谢您的帮助。

【问题讨论】:

    标签: c# unity3d 2d raycasting


    【解决方案1】:

    问题来了:

    RaycastHit2D hit = Physics2D.Raycast(transform.position, transform.right, rayDistance, 1 << LayerMask.NameToLayer("Player"));
    

    看起来你总是向右投射光线。您可能希望它左右切换,就像您在画线时所做的那样。

    【讨论】:

    • 感谢您的建议,我已经更新了左右切换的代码,但仍然没有运气。
    • 我看到您已经定义了一个自定义碰撞层LayerMask.NameToLayer("Player") 我会确保它已定义。如果是,请尝试取下遮罩并让光线投射打印出它击中的内容以确定它的去向。
    • 我确保定义了层,但是,问题是它总是与敌人(rayCast 来自的精灵)发生碰撞,并没有考虑检查它与什么发生碰撞,现在已经修好了。非常感谢您的帮助,非常感谢。
    猜你喜欢
    • 1970-01-01
    • 2022-08-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多