C# 是否可以捕捉垂直于表面的预制件?

C# 是否可以捕捉垂直于表面的预制件?,c#,unity3d,3d,C#,Unity3d,3d,我想,我正试图在一个小星球上建造一个有许多预制件的场景。我面临的问题是,虽然我可以使用Control+Shift轻松地将预制件放置在球体上,但它们不会旋转,因此会出现可怕的旋转。我的目标是使它们垂直放置 目前我知道三种解决方案: 使用Control+Shift将对象放置在场景中,然后手动将其旋转到位 像前面一样将对象放置在场景中,然后向其每个更新方法添加一段代码:transform.rotation=Quaternion.FromToRotation(transform.up,transform

我想,我正试图在一个小星球上建造一个有许多预制件的场景。我面临的问题是,虽然我可以使用Control+Shift轻松地将预制件放置在球体上,但它们不会旋转,因此会出现可怕的旋转。我的目标是使它们垂直放置

目前我知道三种解决方案:

  • 使用Control+Shift将对象放置在场景中,然后手动将其旋转到位
  • 像前面一样将对象放置在场景中,然后向其每个更新方法添加一段代码:
    transform.rotation=Quaternion.FromToRotation(transform.up,transform.position-origin)*transform.rotation
  • 与选项2类似,运行代码并找到某种方法将世界状态保存到场景中,但是。似乎要为一些本应微不足道的事情付出很多努力

  • 第一个是乏味的,很难正确对齐,第二个很容易,但使场景生成器无法代表最后一场比赛,我不知道从哪里开始第三个。有更好的方法吗?

    最后,我决定使用Control+Shift手动执行所有方向。正如约翰建议的那样,你可以编写自己的
    [ExecuteInEditMode]
    编辑器脚本,如果我所居住的星球要大得多,我会仔细研究它


    请注意,如果您沿着脚本路径冒险,则对象不会浮动并完全剪辑通过曲面。毕竟,手动放置可能是必要的。

    我也尝试过顶点捕捉,但它也不能垂直定向预制件。这里似乎有两个问题:(1)如何垂直于曲面定向对象,以及(2)如何在编辑器中实现这一点,以生成已保存的场景。是这样吗?问题1或问题2是否给您带来更多麻烦?您可以尝试向类中添加[ExecuteInEditMode]头。这将使您的更新代码在编辑模式下运行。另一种方法是创建一个编辑器脚本,但这需要更多的工作