Unity Raycast总是回归真实

时间:2017-01-29 01:17:47

标签: c# unity3d raycasting

我在Unity中有一个角色,我正在使用光线投射让他跳跃。但即使光线投射没有到达地面(我可以看到带有调试输出的光线),玩家仍然可以跳跃。任何想法为什么光线总是认为它是碰撞的?光线会撞到我的角色对撞机,导致它是真的吗?我已经在网上搜索了几个小时,我发现没有什么能解决这个问题。这是我的代码:

void FixedUpdate()
{
    Ray ray = new Ray();
    RaycastHit hit;
    ray.origin = transform.position;
    ray.direction = Vector3.down;
    bool output = Physics.Raycast(ray, out hit);
    Debug.DrawRay(ray.origin, ray.direction, Color.red);
    if (Input.GetKey(KeyCode.Space) && output)
    {
        r.AddForce(Vector3.up * 1f, ForceMode.VelocityChange);

    }

}

1 个答案:

答案 0 :(得分:2)

  

光线会撞到我的角色对撞机吗?

是的,这是可能的。

这实际上是Debug.Log可以轻松解决的问题。

Debug.Log("Ray Hit: " + hit.transform.name);放在if语句中,它会显示哪些对象阻止Raycast

如果这确实是问题,this帖子描述了许多解决方法。答案和代码稍有变化,因为这个问题是关于3D而不是2D。只需使用图层。把你的玩家放在第9层然后问题应该消失。

void FixedUpdate()
{
    int playerLayer = 9;

    //Exclude layer 9
    int layerMask = ~(1 << playerLayer); 


    Ray ray = new Ray();
    RaycastHit hit;
    ray.origin = transform.position;
    ray.direction = Vector3.down;
    bool output = Physics.Raycast(ray, out hit, 100f, layerMask);



    Debug.DrawRay(ray.origin, ray.direction, Color.red);
    if (Input.GetKey(KeyCode.Space) && output)
    {
        r.AddForce(Vector3.up * 1f, ForceMode.VelocityChange);
        Debug.Log("Ray Hit: " + hit.transform.name);
    }
}