在游戏世界中从相机到鼠标位置的Raycast

时间:2018-05-26 23:29:59

标签: c# unity3d raycasting

当鼠标位于门(红色区域)时,我想做点什么。我正在试图投射雷,但雷并没有击中门,我无法找到它到底在哪里击中。另外我怎么能df <- read.table(text = "Name Year Value A 1990 5 A 1990 3 A 1991 5 A 1995 5 B 2000 0 B 2000 4 B 1998 5 C 1890 3 C 1790 2", header = TRUE, stringsAsFactors = FALSE) 这条光线?

Debug.DrawRay

Unity Image

3 个答案:

答案 0 :(得分:0)

您可以将此光线绘制为:

Debug.DrawRay(ray.origin, ray.direction);

Debug.DrawRay(Camera.main.transform.position, Camera.main.ScreenPointToRay(Input.mousePosition).direction);

一旦你定义了你的光线,选项1会更直接,但是如果事实证明这个Ray没有按照你期望的方式运行,那么选项2会让你有更多的选择。

camera.ScreenPointToRay预计Vector3Input.mousePosition会返回Vector2。 Vector3和Vector2上的Unity文档看起来你应该能够将Vector2隐含地用作Vector3,并且它会将z组件填充为0,但如果Debug.DrawRay显示光线是问题,那么你需要追加0.可能是这样的:

Ray ray = Camera.main.ScreenPointToRay(new Vector3(Input.mousePosition.x, Input.mousePosition.y, 0));

答案 1 :(得分:0)

您可能需要创建一个LayerMask并将其添加到Physics.Raycast的参数中;还要确保门上有对撞机。多少次我忘了添加一个对撞机,你会感到惊讶。

在绘制光线方面,如果由于某种原因这不起作用。使用Debug.DrawRay。我建议将它放在FixedUpdate()或Update()中。颜色和持续时间你可以设置为你想要的任何东西,但我建议让depthTest为假,因为你想要无论如何绘制光线。然后称它为:

Debug.DrawRay(ray.origin, ray.direction, <color>, <duration>, false);

答案 2 :(得分:0)

解决方法是转到您的相机,并将标签设置为“ MainCamera ”。或者,您可以修改代码以包含照相机变量,然后使用该变量代替Camera.main。