【发布时间】:2015-06-14 23:53:28
【问题描述】:
编写允许玩家使用简单块构建的 C# 脚本。出于这个原因,我从 playercam 向前投射光线。当射线击中某个物体时 - 我用 hit.point 得到了 collison 世界坐标 如果我在该坐标上实例化一个构造块 - 它将与其他对象重叠创建。我必须改变坐标。
我怎样才能得到如上图所示的点?这将允许我计算创建块的坐标
【问题讨论】:
编写允许玩家使用简单块构建的 C# 脚本。出于这个原因,我从 playercam 向前投射光线。当射线击中某个物体时 - 我用 hit.point 得到了 collison 世界坐标 如果我在该坐标上实例化一个构造块 - 它将与其他对象重叠创建。我必须改变坐标。
我怎样才能得到如上图所示的点?这将允许我计算创建块的坐标
【问题讨论】:
您可以使用 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);
}
}
这将在光线投射的交点处实例化您的新块(如果您希望它们精确对齐,则需要计算相交面的中心),并继承相交游戏对象的旋转。
请注意,这不会阻止新方块在现有方块中生成;它只会阻止它在你投射光线的方块内生成。
【讨论】: