【问题标题】:Offseting a Ray from camera before casting投射前从相机偏移光线
【发布时间】:2020-05-12 11:38:09
【问题描述】:

亲爱的 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),无论手机的像素大小如何,我都可能需要一些帮助。

感谢您的帮助,干杯。

【问题讨论】:

    标签: unity3d raycasting


    【解决方案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)
        }
    

    【讨论】:

    • 它可以稍微调整一下,谢谢,我不知道我可以改变光线的原点。
    【解决方案2】:

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

    【讨论】:

      猜你喜欢
      • 2011-08-29
      • 1970-01-01
      • 2021-02-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-07-30
      • 1970-01-01
      • 2013-05-11
      相关资源
      最近更新 更多