【发布时间】:2016-05-01 20:59:37
【问题描述】:
我确实花了一整天的时间研究 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 正在正常工作,但是当我单击对象时,它拒绝确认从鼠标位置到对象的射线命中。我还应该提到该项目是二维的。有什么建议吗?
【问题讨论】:
-
好吧,如果是 2D,你也应该使用 2D 光线投射。文档:docs.unity3d.com/ScriptReference/Physics2D.Raycast.html
-
感谢@GunnarB 让我走上正轨。但是,真正让我困惑的是 raycast 函数的参数,我们将 RaycastHit 变量放在哪里?我不认为这是参数之一。另外,我对 layerMask 的用途以及最小和最大深度参数感到困惑。你能为我澄清一下吗?非常感谢您的帮助
-
2D版本返回值所以你写
RaycastHit2D hit = Physics2D.Raycast(...)。所有具有= something的参数都是可选的,因此如果您的目的不需要,您不需要在其中放置一些东西。您将最喜欢只需要开始和方向。文档中的相应行可能是您需要的(也许方向不正确)。 -
就是这条线
RaycastHit2D hit = Physics2D.Raycast(transform.position, -Vector2.up);,我真的不能告诉你正确的方向是什么,因为这取决于你如何设置你的场景。如果没有从默认方向更改相机方向,我认为-Vector2.up应该是正确的。如果你不能让它工作,也有可能是某些东西阻挡了光线投射,或者你的对象没有响应光线投射(例如,因为它没有对撞机,或者玩家所在的图层没有允许光线投射交互)。 -
Vector2D 没有
forward。轴是默认的,所以 -up 应该这样做。否则你可以看看这个问题和前两个答案stackoverflow.com/questions/20583653/…
标签: c# unity3d click mouse raycasting