Unity有一个功能Terrain.sampleHeight(point)
,这是伟大的,它立即给你脚下地形的高度,而不是必须投。
然而,任何重要的项目都有不止一个地形。(实际上,任何物理上大的场景都不可避免地以某种方式具有地形 * 拼接 *。)
Unity有一个函数Terrain.activeTerrain
-我不是瞎编的-给你:“第一个加载”
显然那是完全没用的。
事实上,有没有一种快速的方法让地形“在你下面”?然后你可以使用快速函数.sampleHeight
?
“请注意,你当然可以......施法找一个地形!但你有你的高度,所以不用担心.sampleHeight
!”
简而言之,是否有一个匹配的函数与sampleHeight
一起使用,让该函数知道 * 哪个 * Terrain用于给定的xyz?
(Or确实,sampleHeight
只是一个相当无用的演示函数,只在一个Terrain的演示中可用吗?)
6条答案
按热度按时间qoefvg9y1#
事实上,是否有一种快速的方法可以让Terrain“位于您的下方”-以便随后使用快速函数.sampleHeight?
是的,这是可以做到的。
(Or确实,sampleHeight只是一个相当无用的演示函数,只在一个Terrain的演示中可用吗?)
没有
Terrain.activeTerrain
返回场景中的主地形,Terrain.activeTerrains
(注意结尾的“s”)返回场景中的**活动地形。使用
Terrain.activeTerrains
获取地形,它返回Terrain
数组,然后使用Terrain.GetPosition
函数获取其位置。通过查找离玩家位置最近的地形来获取当前地形。您可以使用Vector3.Distance
或Vector3.sqrMagnitude
(速度更快)对地形位置进行排序。用途:
假设玩家的位置是
transform.position
:虽然可以用
Terrain.SampleHeight
来实现,但这可以通过从玩家的位置到地形的简单光线投射来简化。kgsdhlau2#
Terrain.GetPosition()=地形.转换.位置=世界中的位置
工作方法:
4si2a6ki3#
事实证明,答案是否定的,Unity不提供这样的功能。
9gm1akwq4#
您可以使用此功能获取与当前位置最近的地形:
然后您可以像这样使用函数:
a6b3iqyw5#
z2acfund6#
简单解决方案:(适用于2022年,已在Unity 2021.3.2f1中测试)
从播放器向下光线投射,忽略所有没有“地形”层的东西(可以在检查器中轻松设置层)。
编码:
此时,您已经通过“hit.transform.gameObject”引用了Terrain。
对于我的示例,我希望通过其instanceID引用该terrain:
但是如上所述,如果你想要Terrain本身(作为Terrain对象)而不是instanceID,那么“hit.transform.gameObject”已经给你提供了引用。
来自以下链接的输入和代码片段: