我使用正交相机成功投射和绘制调试光线,但我将其更改为透视,并且我的光线似乎都不再工作(在场景视图中,我的调试光线不随鼠标移动)。
这是我的Orthographic代码,对于透视我需要做些什么?
public class Cursor : MonoBehaviour {
// 45 degree angle down, same as camera angle
private Vector3 gameAngle = new Vector3(0, -45, -45);
public RaycastHit hit;
public Ray ray;
void Update() {
// Rays
ray = new Ray(Camera.main.ScreenToWorldPoint(Input.mousePosition), gameAngle);
if (Debug.isDebugBuild)
Debug.DrawRay(Camera.main.ScreenToWorldPoint(Input.mousePosition), gameAngle * 20, Color.green);
}
}
答案 0 :(得分:1)
首先,我们需要了解DrawRay函数对参数的期望
它想要射线的原点,方向和距离(您还可以为其指定颜色和其他参数)。
公共静态无效值DrawRay(Vector3开始,Vector3目录,颜色color = Color.white,浮动持续时间= 0.0f,bool depthTest = true);
所以现在我们需要知道射线原点和ray.point位置之间的方向,以找到可以使用减法运算的方法...
如果将一个空间中的一个点减去另一个,则结果是 从一个对象“指向”另一个对象的向量:
// Gets a vector that points from the player's position to the target's.
var heading = hit.point - ray.origin;
现在有了此信息,我们可以获取射线的方向和距离
var distance = heading.magnitude;
var direction = heading / distance; // This is now the normalized direction.
这将是结果代码...
Ray ray = Camera.main.ScreenPointToRay(Input.mousePosition);
RaycastHit hit;
if (Physics.Raycast(ray, out hit))
{
// Gets a vector that points from the player's position to the target's.
var heading = hit.point - ray.origin;
var distance = heading.magnitude;
var direction = heading / distance; // This is now the normalized direction.
Debug.DrawRay(ray.origin, direction * distance, Color.red);
}
https://docs.unity3d.com/Manual/DirectionDistanceFromOneObjectToAnother.html https://docs.unity3d.com/ScriptReference/Debug.DrawRay.html
答案 1 :(得分:0)
您是否尝试过更改视角?我假设你有2d模式。
答案 2 :(得分:0)
我想直接从文档中得到答案 http://docs.unity3d.com/ScriptReference/Camera.ScreenPointToRay.html
Ray ray = camera.ScreenPointToRay(Input.mousePosition);
Debug.DrawRay(ray.origin, ray.direction * 10, Color.yellow);