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)
//{
//}
}
}
我们发现我们再也无法击中二维对撞机或三维对撞机了
按照@programmer的建议并将对撞机调整到一个非常大的对象后,检测到命中(谢谢,@ programmer)
但是对撞机变得如此之大以至于事件不会成为场景。我们应该发现现在应该有多大。
答案 0 :(得分:1)
在挖掘之后我已经想到了这一点:
诀窍是我们在使用NGUI时应该使用UICamera.currentCamera
代替Camera.main
拍摄光线。
如果我们添加一行如下:
Debug.DrawLine(ray.origin, ray.origin + ray.direction * 100, Color.red, 2, true);
在
Ray ray = Camera.main.ScreenPointToRay(Input.mousePosition);
注意表示光线的红线,由于Camera.main
具有不同的比例,因此无法在所需位置拍摄。
但是如果我们将卡梅拉改为UICamera拍摄光线,我们可以拍摄所需的光线。
Ray ray = UICamera.currentCamera.ScreenPointToRay(Input.mousePosition);
希望这可以帮助人们遇到同样的坑。