前段时间有一个小需求,模拟汽车烟尘烟尘尾迹仿真的算法,其中有一部分是需要判断汽车行驶的地形材质,根据地形材质来实现不同的效果,感觉这个功能还不错,于是拿出来给大家分享与交流。
其中借鉴了一个大佬的方法:http://answers.unity3d.com/questions/34328/terrain-with-multiple-splat-textures-how-can-i-det.html;
因为公路马路等一些地形是用的模型,于是最开始我的思路是在汽车轮胎下面发出射线,将模型设定标签,来进行检测。但是由于还有地形(Terrain)刷的草地、沙漠等地形通过射线无法判断,冥思苦想之后,终于在网上找到了一个很好的方法。
public Terrain terrain; // 定义一个指定地形
//在当前的地形上返回一个指定点的相对混合的纹理的一个数组
//返回的数组中的长度将等于已经添加到地形的材质数组
//worldPos 目标的坐标,在项目里指汽车坐标
public float[] GetTextureMix(Vector3 worldPos)
{
TerrainData terrainData = terrain.terrainData;
Vector3 terrainPos = terrain.transform.position;
//Debug.Log(terrainData);