我真的花了一整天时间研究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正常工作,但是当我点击我的对象时,它拒绝从我的鼠标位置向对象确认rayhit。我还要提一下,该项目是二维的。有什么建议?
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.如果您想要检测触摸的GameObject只是2D纹理或Sprite,那么请使用以下代码:
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纹理或精灵。由于这是一个2D游戏,你使用的任何collider
必须以2D结尾。例如,有一个Box Collider
,并有一个Box Collider 2D
。你必须附上Box Collider 2D
。到精灵/纹理。
3.如果#2不起作用,那么您的项目被创建为3D而不是2D。删除项目,创建一个新项目,并确保这次选择2D。 #2答案现在应该工作,只要附加2D collider
。