在投射前从相机偏移光线

问题描述 投票:3回答:2

您好,Unity游戏开发人员,

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

ray offset illust

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

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

但是,此系统存在一些缺陷,例如命中位置与生成位置不同,这会阻止您执行某些操作,例如避开物体。因此,在我从使用像素坐标Input.MousePosition的相机屏幕点返回光线之前,我想像插图中那样偏移它,以便可以获取偏移的实例化位置,该位置是光线投射的实际命中点。我可以检查该位置一些条件。简单来说,我希望团结一致,就像我在屏幕上触摸的位置要比当前触摸的位置高。

[如果任何人都知道如何在世界坐标中偏移例如等于(0,0,2)的像素坐标,而不管手机的像素大小,我可能会使用一些帮助。

感谢您的帮助,干杯。

unity3d raycasting
2个回答
0
投票

您可以将鼠标位置偏移Screen.height * 0.1f(无论哪种数字都对您有用)。您将偏移屏幕高度的百分比。


0
投票

尝试

Vector3 offset = camera.transform.right * 0.1f;//
Ray ray = camera.ScreenPointToRay(Input.mousePosition)
ray.origin += offset; //
if(Physics.Raycast(ray, out hit, someDistance))
{
   Instantiate(prefab, hit.point + MyOffsetVector3, Quaternion.identity)
}
© www.soinside.com 2019 - 2024. All rights reserved.