Unity C# Raycast 鼠标点击
Unity C# Raycast Mouse Click
我真的花了一整天的时间研究 Unity C# Raycasting 的光线,但我没有什么可展示的。我研究了教程、在线资源、堆栈溢出问题,甚至逐字逐句地复制了脚本,希望 Unity 最终能够识别我实际使用 Raycast 的所有尝试。这是一个使用 Raycast 的脚本示例,它对我来说根本不起作用:
if (mouseDown) {
print ("mouse is down");
Ray ray = Camera.main.ScreenPointToRay(Input.mousePosition);
RaycastHit hit;
if (Physics.Raycast(ray, out hit)) {
print ("response???");
}
}
我觉得这应该可行...但事实并非如此。 mouseDown 正常工作,但是当我单击我的对象时,它拒绝确认从我的鼠标位置到对象的光线命中。我还应该提到该项目是二维的。有什么建议吗?
1。如果您尝试检测触摸的对象是 Image
/Canvas
,那么这不是执行此操作的方法。要使用 Image/Canvas 检测触摸,您必须使用 IPointerDownHandler
或 IPointerClickHandler
派生,然后从中实现功能。
public class YourClass : MonoBehaviour,IPointerDownHandler,IPointerClickHandler
{
public void OnPointerClick(PointerEventData eventData)
{
Debug.Log("Clicked");
}
public void OnPointerDown(PointerEventData eventData)
{
Debug.Log("Down");
}
}
2。现在,如果你想要检测触摸的游戏对象只是一个 2D 纹理或精灵,那么使用下面的代码:
if (Input.GetMouseButtonDown(0))
{
Vector2 cubeRay = Camera.main.ScreenToWorldPoint(Input.mousePosition);
RaycastHit2D cubeHit = Physics2D.Raycast(cubeRay, Vector2.zero);
if (cubeHit)
{
Debug.Log("We hit " + cubeHit.collider.name);
}
}
为此,您必须将 Collider2D
附加到 2D 纹理或 Sprite。通过重新调整对撞机的大小,确保对撞机覆盖 2D 纹理或 Sprite。由于这是一个2D游戏,所以你使用的任何collider
都必须以2D结束。例如,有一个Box Collider
和一个Box Collider 2D
.您必须附上 Box Collider 2D
。到 Sprite/Texture。
3。如果 #2 不起作用,那么您的项目创建为 3D 而不是 2D。删除项目,创建一个新项目并确保这次选择 2D。 #2 只要附上 2D collider
答案现在就应该有效。
我真的花了一整天的时间研究 Unity C# Raycasting 的光线,但我没有什么可展示的。我研究了教程、在线资源、堆栈溢出问题,甚至逐字逐句地复制了脚本,希望 Unity 最终能够识别我实际使用 Raycast 的所有尝试。这是一个使用 Raycast 的脚本示例,它对我来说根本不起作用:
if (mouseDown) {
print ("mouse is down");
Ray ray = Camera.main.ScreenPointToRay(Input.mousePosition);
RaycastHit hit;
if (Physics.Raycast(ray, out hit)) {
print ("response???");
}
}
我觉得这应该可行...但事实并非如此。 mouseDown 正常工作,但是当我单击我的对象时,它拒绝确认从我的鼠标位置到对象的光线命中。我还应该提到该项目是二维的。有什么建议吗?
1。如果您尝试检测触摸的对象是 Image
/Canvas
,那么这不是执行此操作的方法。要使用 Image/Canvas 检测触摸,您必须使用 IPointerDownHandler
或 IPointerClickHandler
派生,然后从中实现功能。
public class YourClass : MonoBehaviour,IPointerDownHandler,IPointerClickHandler
{
public void OnPointerClick(PointerEventData eventData)
{
Debug.Log("Clicked");
}
public void OnPointerDown(PointerEventData eventData)
{
Debug.Log("Down");
}
}
2。现在,如果你想要检测触摸的游戏对象只是一个 2D 纹理或精灵,那么使用下面的代码:
if (Input.GetMouseButtonDown(0))
{
Vector2 cubeRay = Camera.main.ScreenToWorldPoint(Input.mousePosition);
RaycastHit2D cubeHit = Physics2D.Raycast(cubeRay, Vector2.zero);
if (cubeHit)
{
Debug.Log("We hit " + cubeHit.collider.name);
}
}
为此,您必须将 Collider2D
附加到 2D 纹理或 Sprite。通过重新调整对撞机的大小,确保对撞机覆盖 2D 纹理或 Sprite。由于这是一个2D游戏,所以你使用的任何collider
都必须以2D结束。例如,有一个Box Collider
和一个Box Collider 2D
.您必须附上 Box Collider 2D
。到 Sprite/Texture。
3。如果 #2 不起作用,那么您的项目创建为 3D 而不是 2D。删除项目,创建一个新项目并确保这次选择 2D。 #2 只要附上 2D collider
答案现在就应该有效。