【发布时间】:2017-06-16 02:10:08
【问题描述】:
在将主 UI 框架转换为 NGUI 后,我们发现我们无法再用碰撞器击中对象了,下面的代码在我们不使用 NGUI 时运行良好:
private void checkRayCast()
{
if ((Input.GetMouseButtonDown(0)))
{
Debug.Log("shoot ray!!!");
Vector2 point = Camera.main.ScreenToWorldPoint(Input.mousePosition);
Ray ray = Camera.main.ScreenPointToRay(Input.mousePosition);
RaycastHit hit2;
if (Physics.Raycast(ray, out hit2, 100))
{
//this should hit a 3d collider
Debug.Log("we may hit something");
Debug.Log(hit2.collider.gameObject.tag);
}
RaycastHit2D[] hits = Physics2D.RaycastAll(point, Vector2.zero, 0f);
if (hits.Length != 0)
{
//this should all 2d collider
Debug.Log(" ohh, we hit something");
}
else
{
Debug.Log("you hit nothing john snow!!!");
}
//if (hit.transform.gameObject.GetComponent<Rigidbody2D>() != null)
//{
//}
}
}
我们发现我们无法再击中 2d 对撞机或 3d 对撞机了
编辑
在遵循@programmer 的建议并将对撞机调整为非常大的大小后,检测到命中(感谢@programmer)
但是对撞机被改成太大了,以至于它无法制造场景。我们应该找出现在应该有多大。
【问题讨论】:
-
不知道你为什么要从UGUI切换到NGUI。如果您的项目是在 NGUI 之上构建的,但不要在 NGUI 之上创建新项目,则可以使用 NGUI。 UGUI 不仅为您提供了更多支持,Unity 2017 还将在 UGUI 中添加集成 TextMesh Pro,这甚至使它变得更好。 3 年前用 NGUI 就好了。
-
对您的咆哮感到抱歉,但现在重新评估该决定还为时不晚。我注意到代码中有这么多
Debug.Log....你看到任何日志吗?当你增加 Collider 的大小时会发生什么?也可以尝试禁用 Is Trigger。好久没用NGUI了,点击UISprite脚本上的“Collider”复选框会发生什么?它应该调整对撞机。只是向您抛出一些可能的解决方案。 -
@Programmer 感谢回复我们改成NGUI的原因是在尝试使用时遇到了很多坑,一个大问题是纹理与alpha重叠时的性能问题,显然它们这方面做得不好,还有一点就是把UGUI和世界上的游戏对象结合起来很不方便,就像我想从UI面板上拖一个东西到游戏世界一样。所以我们决定改用NGUI,直到UGUI可以完成这项工作。并且我会尝试增加碰撞器来检查 NGUI 的大小调整是否导致了这个问题。
-
打印的日志表明光线投射没有击中任何东西,3d 或 2d 对撞机都不起作用。
-
您的第一条评论很有道理。至于您的第二条评论,您可以通过将 Canva 的渲染模式更改为世界空间来将 ui 对象放入世界空间。你看到 `Debug.Log("shoot ray!!!");` 日志了吗?您是否也调整了 Collider 的大小以查看会发生什么?
标签: c# unity3d raycasting ngui