从相机发射光线前进行偏移再进行投射

3

亲爱的Unity游戏开发者们,

今天我有一个问题,看起来很简单,但我花了很长时间才解决。为了说明我想要实现什么,我制作了一个简单的插图。

射线偏移示意图

我正在开发一个使用拖放系统的简单移动游戏;然而,正如你所想象的那样,当人们触摸屏幕时,手指通常会挡住触摸位置的视野,因此我使用一些偏移量实例化物体。现在我有这个简单的代码,可以很好地实现我想要的效果。

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

然而,该系统存在缺陷,如被击中位置与生成位置不同,这会阻止您执行某些操作,例如物体避免。因此,在从相机的屏幕点返回射线之前(该射线使用像素坐标Input.MousePosition),我想要进行偏移,就像插图中那样,这样我就可以实现一个偏移后的实例化位置,这是射线投射的实际hit.point,我可以对其进行一些条件检查。简单来说,我希望Unity的行为就像我当前在屏幕上触摸了更高的位置。
如果您知道如何对像素坐标进行偏移,例如在世界坐标中等效于(0,0,2),而不考虑手机的像素大小,则可能需要一些帮助。
感谢您的帮助,祝好。
2个回答

1

尝试

    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)
    }

它可以工作,只需要进行一些微调,谢谢。我不知道我可以改变射线的起点。 - Ahmet Bugra

0
你可以通过Screen.height*0.1f(任何适合你的数字)来偏移屏幕点。 你将按屏幕高度的百分比进行偏移。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接