碰撞检测如果Raycast源在碰撞器内

时间:2017-08-07 07:10:24

标签: unity3d unity5 unityscript

我正在尝试将光源从内部投射到球体。 我的主摄像头位置(0,0,0) 球体位置(0,0,0)半径:300 我想知道hit.position和hit.collider.gameobject 我正在尝试下面的教程。 http://answers.unity3d.com/questions/129715/collision-detection-if-raycast-source-is-inside-a.html

即使我尝试过教程,我也无法从控制台窗口看到理想的结果。 (我的控制台窗口中没有Debug.Log结果) 我该怎么办?

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class EyeTrackingPoint : MonoBehaviour
{
    public float sphereRadius = 300; // position(0,0,0) radius 300
    public GameObject screen3D; // sphere

    public void Update()
    {
        Camera cam = Camera.main; // position(0,0,0)
        RaycastHit hit;
        Ray ray = new Ray(cam.transform.position,cam.transform.rotation * Vector3.forward * sphereRadius );
        ray.direction = -ray.direction;
        if (Physics.Raycast(ray,out hit)&&hit.collider.gameObject.Equals(screen3D))
        {
            Debug.Log(hit.point);
        }
    }
}

感谢您的阅读。

2 个答案:

答案 0 :(得分:2)

团结的Raycast必须符合这些事情;使用光线应来自的世界点。使用该光线的方向。你需要指定它应该在哪个层检查。最重要的是,只有具有碰撞器的物体才能被击中,即使游戏对象位于正确的层中但没有活动对撞机也不会发生任何事情。示例;

    {
     RaycastHit hit = Physics.Raycast(start, direction, 1000f, 1<<10);
    }

成功的光线投射信息保存在RaycastHit中; 1000f是一个浮点值,它限制了光线投射的范围。这样你可以控制它对象的查找范围。

如果你没有在光线投射中指定图层面板,它将返回第一个被任何类型的活动对撞机击中的对象,无论它在哪个层中。

答案 1 :(得分:0)

对撞机内部的射线广播不会产生碰撞。

    if (Physics.Raycast(Vector3.zero, Vector3.up, 100))
        Debug.Log("HIT");

如果球体位于世界0,0,0周围,则“ Hit”将永远不会在控制台中写入。当您将球体从原点移出,移出并移开时,您会看到它已打印。

这些都会影响背面。但是,您可以启用它,并启用“物理设置”中的复选框。也请参见c#上有关此参数的文档:https://docs.unity3d.com/ScriptReference/Physics-queriesHitBackfaces.html