在 Unity (C#) 中根据地形旋转对象

本文关键字:根据地 旋转 对象 Unity | 更新日期: 2023-09-27 18:32:53

我目前有一个用于构建的物品放置系统。它的工作原理是实例化对象的"幽灵",显示可以放置它的位置,幽灵(半透明(对象附加到摄像机,并在玩家单击时将对象实例化到其位置。

我得到了保持鬼对象的位置,如下所示:

        var pos = transform.position + transform.forward * placeDistance;  // A position 'someDistance' in front of the player
        pos.y = Terrain.activeTerrain.SampleHeight(pos);  // Get the position at the surface of the terrain to place the object
        firePlaceable.transform.position = pos + Vector3.up * 0.001f;  // 'halfHeight' is used in case the pivot is not on the base

现在。。我需要根据地形旋转物体,以便或多或少正确地旋转火场。有什么想法吗?最好的计划是什么?

在 Unity (C#) 中根据地形旋转对象

在位置使用地形法线矢量。

例如,你可以直接从壁炉上向下投射光线。生成的命中包含一个法线,即您的位置向上向量。

想来想去...我假设您已经在进行光线投射以获得正确放置壁炉的位置?

使用放置光线投射来获取向上矢量,而不是制作新的矢量。

所以基本上做

fireplace.transform.up = clickPlaceHit.normal;