【问题标题】:Unity3D RaycastingUnity3D 光线投射
【发布时间】:2015-06-14 23:53:28
【问题描述】:

编写允许玩家使用简单块构建的 C# 脚本。出于这个原因,我从 playercam 向前投射光线。当射线击中某个物体时 - 我用 hit.point 得到了 collison 世界坐标 如果我在该坐标上实例化一个构造块 - 它将与其他对象重叠创建。我必须改变坐标。

我怎样才能得到如上图所示的点?这将允许我计算创建块的坐标

【问题讨论】:

    标签: c# unity3d


    【解决方案1】:

    您可以使用 RaycastHit 的 point 属性并沿着相交面的法线向外移动到块的范围(宽度的一半;如果是单位立方体,则为 0.5f);像这样:

    if (Input.GetMouseButtonDown (0)) {
        Ray ray = Camera.main.ScreenPointToRay (Input.mousePosition);
        RaycastHit hit;
        if (Physics.Raycast (ray, out hit)) {
            Instantiate (prefab, hit.point + hit.normal * blockExtent, hit.transform.rotation);
        }
    }
    

    这将在光线投射的交点处实例化您的新块(如果您希望它们精确对齐,则需要计算相交面的中心),并继承相交游戏对象的旋转。

    请注意,这不会阻止新方块在现有方块中生成;它只会阻止它在你投射光线的方块内生成。

    【讨论】:

    • hit.point + hit.normal 我试过这个。它适用于其他立方体,但不适用于平面或其他大型物体。
    • 哦...它有效。我有点困惑。这个我已经试过了,但是之前没用过
    • 您是否将点乘以预制件的范围(或其他一些计算的偏移量)?公平地说,您的问题专门针对方块,而不是平面或其他类型的物体。
    • 很高兴我能帮上忙!如果此解决方案适合您,您可以通过单击左侧问题分数下方的check mark 将此答案标记为已接受。
    猜你喜欢
    • 2019-01-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-07-08
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多