投射前从相机偏移射线

Offseting a Ray from camera before casting

尊敬的 Unity 游戏开发人员,您好,

今天我有一个看似简单但我很难解决的问题。为了解释我想要实现的目标,我做了一个简单的插图。

我目前正在开发一款使用拖放系统的简单手机游戏;然而,正如您可以猜到的那样,当人们触摸屏幕时,手指通常会挡住触摸位置的视线,因此我实例化了带有一点偏移的对象。现在我有这个简单的代码,可以很好地实现我想要的。

 Ray ray = camera.ScreenPointToRay(Input.mousePosition)
 if(Physics.Raycast(ray, out hit, someDistance))
 {
       Instantiate(prefab, hit.point + MyOffsetVector3, Quaternion.identity)
 }

但是,该系统存在缺陷,例如命中位置与生成位置不同,这会阻止您执行某些操作,例如避免物体。因此,在我 return 来自使用像素坐标 Input.MousePosition 的相机屏幕点的光线之前,我想像图中那样偏移它,这样我就可以获得一个偏移实例化位置,即实际 hit.point从 raycast 中我可以检查一些条件。简而言之,我希望 unity 的表现就像我在屏幕上触摸的位置比我现在触摸的更高。

如果你们中有人知道如何偏移世界坐标中的像素坐标,例如 (0, 0, 2) 而不管 phone 的像素大小,我可能会需要一些帮助.

感谢您的帮助,干杯。

您可以将屏幕点偏移 Screen.height*0.1f(任何适合您的数字)。 您将偏移屏幕高度的百分比。

尝试

    Vector3 offset = camera.transform.up * 0.1 //offset upwards by some value
    Ray ray = camera.ScreenPointToRay(Input.mousePosition)
    ray.origin += offset //add offset to ray start
    if(Physics.Raycast(ray, out hit, someDistance))
    {
       Instantiate(prefab, hit.point + MyOffsetVector3, Quaternion.identity)
    }