平行于地形生成物体

Spawning objects parallel to the terrain

故事
所以我正在制作一个程序地形生成器脚本来在地面上生成岩石所有大石头都不在乎它们是什么旋转但我有一些小石头必须与地形平行否则它们看起来很奇怪,部分其中一部分漂浮在地面上另一部分卡在地面上四元数我似乎不明白

问题
我得到 terrainData.GetInterpolatedNormal 并将其放入名为 normalsvector3 然后当我正在生成我的岩石我将它旋转到地面

Instantiate(SmallRock, new Vector3(point.x, Heights, point.y) transform.rotation = new Quaternion(normals.x,normals.y, normals.z, 90));

我的问题出在四元数(normals.x,normals.y,normals.z,90) 我不知道该放什么,我应该只放 normals.x/z 还是应该放 normals.y 也在那里,我什至不知道最后的 90 是什么,是的,我知道 interpolatednormals returns a 0 to 1 所以我尝试将它相乘以使其旋转超过 1 但它似乎只是不旋转正确的方式如果你现在不能告诉我真的不知道四元数是如何工作的但我到处搜索我可以找不到任何有用的东西,而且我真的不想学习四元数的工作原理,所以感谢您为我节省时间

Quaternions 使用复合(虚数)数表示 3d 中的旋转序列 space。

当您使用它的构造函数实例化一个新的 Quaternion 时,您会向它提供您认为 Quaternion 的实数和虚数应该是什么。

尽管看似熟悉的 xyz 名称您不应手动修改或提供它们,但它们不是欧拉角、笛卡尔坐标或传统矢量分量.

您当前传递的是方向的一部分,而不是 Quaternion 的实部和虚部。

法线是给定位置的“向外方向”。所以为了得到一个旋转,我们需要一些其他的方向来比较它以获得一个旋转。

Compare your direction 向上方向,您将获得可以使用的旋转。

Quaternion rotation = Quaternion.FromToRotation(Vector3.up, normalDirection);