Unity3d 光线投射和OnMouseOver之间的精度差
我真的对我在Unity3D项目中看到的东西感到惊讶,我想知道是否有人对此有解释,因为我在谷歌上搜索后没有找到解释 所以我有一个项目,在那里我实例化了多个对象,基本上是立方体,还有它们的碰撞器(没有触发),我想知道鼠标是否在其中一个上面。 因此,我附上了一个取自unity文档的非常基本的脚本:Unity3d 光线投射和OnMouseOver之间的精度差,unity3d,Unity3d,我真的对我在Unity3D项目中看到的东西感到惊讶,我想知道是否有人对此有解释,因为我在谷歌上搜索后没有找到解释 所以我有一个项目,在那里我实例化了多个对象,基本上是立方体,还有它们的碰撞器(没有触发),我想知道鼠标是否在其中一个上面。 因此,我附上了一个取自unity文档的非常基本的脚本: void OnMouseEnter() { Debug.Log("enter block " + this.name); // Change the color of the GameOb
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,这将阻止编译。也许这就是问题所在?对不起,这是这个问题的复制粘贴错误,我会编辑它。不过,它应该可以正常工作。创建一个新的多维数据集,将带有代码的脚本放在上面,然后看看会发生什么。我刚刚做了,它工作准确。