Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/joomla/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Unity3d 光线投射和OnMouseOver之间的精度差_Unity3d - Fatal编程技术网

Unity3d 光线投射和OnMouseOver之间的精度差

Unity3d 光线投射和OnMouseOver之间的精度差,unity3d,Unity3d,我真的对我在Unity3D项目中看到的东西感到惊讶,我想知道是否有人对此有解释,因为我在谷歌上搜索后没有找到解释 所以我有一个项目,在那里我实例化了多个对象,基本上是立方体,还有它们的碰撞器(没有触发),我想知道鼠标是否在其中一个上面。 因此,我附上了一个取自unity文档的非常基本的脚本: void OnMouseEnter() { Debug.Log("enter block " + this.name); // Change the color of the GameOb

我真的对我在Unity3D项目中看到的东西感到惊讶,我想知道是否有人对此有解释,因为我在谷歌上搜索后没有找到解释

所以我有一个项目,在那里我实例化了多个对象,基本上是立方体,还有它们的碰撞器(没有触发),我想知道鼠标是否在其中一个上面。 因此,我附上了一个取自unity文档的非常基本的脚本:

void OnMouseEnter()
{
    Debug.Log("enter block " + this.name); 
    // Change the color of the GameObject to red when the mouse is over GameObject
    m_Renderer.material.color = m_MouseOverColor;
}

void OnMouseOver()
{
    Debug.Log("over block " + this.name); 
    // Change the color of the GameObject to red when the mouse is over GameObject
    m_Renderer.material.color = m_MouseOverColor;
}

void OnMouseExit()
{
    Debug.Log("exit block " + this.name);
    // Reset the color of the GameObject back to normal
    m_Renderer.material.color = m_OriginalColor;
}
我似乎没有看到任何结果。在寻找选项时,我将“碰撞器”框缩放到更大的尺寸,可以得到一些结果,但它们并不精确,鼠标需要稍微靠近立方体才能工作。它看起来像是由对撞机的尺寸引起的透视效果,这对最终用户来说是恼人的

因此,我尝试在连接到相机的脚本中使用一个简单的光线投射测试:

Ray ray = Camera.main.ScreenPointToRay(Input.mousePosition);
RaycastHit hit;
if (Physics.Raycast(ray, out hit, 100000000, LayerMask.GetMask("TrackPartEnd")))
{
    Debug.DrawRay(ray.origin, ray.direction * 100000000, Color.blue, 3);
    myCursorObject.transform.position = hit.point;
}
else
{
    if (Physics.Raycast(ray, out hit, 100000000, LayerMask.GetMask("Floor")))
    {
       Debug.DrawRay(ray.origin, ray.direction * 100000000, Color.green, 3);
       myCursorObject.transform.position = hit.point;
    }
    else
    {
       Debug.DrawRay(ray.origin, ray.direction * 100000000, Color.red, 3);
    }
}
通过这个,我得到了一个非常好的结果,它很快而且非常精确

但我没有找到任何解释为什么?据我所知,OnMouseOver也使用raycast。我仔细检查了一下,也没有发现任何东西阻挡光线。
有人有什么解释吗?

对我来说似乎效果很好。脚本中有两个
OnMouseEnter
s,这将阻止编译。也许这就是问题所在?对不起,这是这个问题的复制粘贴错误,我会编辑它。不过,它应该可以正常工作。创建一个新的多维数据集,将带有代码的脚本放在上面,然后看看会发生什么。我刚刚做到了,而且效果很好,对我来说似乎非常好。脚本中有两个
OnMouseEnter
s,这将阻止编译。也许这就是问题所在?对不起,这是这个问题的复制粘贴错误,我会编辑它。不过,它应该可以正常工作。创建一个新的多维数据集,将带有代码的脚本放在上面,然后看看会发生什么。我刚刚做了,它工作准确。