在 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
现在。。我需要根据地形旋转物体,以便或多或少正确地旋转火场。有什么想法吗?最好的计划是什么?
在位置使用地形法线矢量。
例如,你可以直接从壁炉上向下投射光线。生成的命中包含一个法线,即您的位置向上向量。
想来想去...我假设您已经在进行光线投射以获得正确放置壁炉的位置?
使用放置光线投射来获取向上矢量,而不是制作新的矢量。
所以基本上做
fireplace.transform.up = clickPlaceHit.normal;