本文主要是介绍unity 圆形障碍,避障算法,动态避障,静态避障,屎壳郎推屎回娘家,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
Unity3d圆形障碍避障算法,动态避障,静态避障
屎壳郎推屎回娘家
废话不多上图
1:根据,屎和娘家的位置做计算,不管屎在哪里,获取朝向娘家,屎后面一定距离的位置
//获取位置Vector3 GetTraget(Vector3 start, Vector3 end) //end 家{Vector3 normal = (end - start).normalized;float percent = -4; //距离屎保留一点距离return normal * (percent) + start;}
2:屎壳郎需要跑到屎后面,推屎回娘家,需要进行避障算法
//避障算法private List<Vector3> pathPoints = new List<Vector3>();private void FindPath(Vector3 palyerPos, Vector3 targetPos, Vector3 obstaclePos, float aroundRadius){pathPoints.Add(palyerPos);Vector3 pathDir = targetPos - palyerPos;Vector3 pointDir = obstaclePos - palyerPos;float crossValue = Vector3.Cross(pathDir, pointDir).y;float angleDelta = 45;if (crossValue < 0){angleDelta = -45;}Vector3 obstacleToPlayer = (palyerPos - obstaclePos).normalized;Vector3 obstacleToTarget = (targetPos - obstaclePos).normalized;float threshold = Vector3.Dot(obstacleToPlayer, obstacleToTarget);bool caculateFinished = false;int i = 1;do{ Quaternion randRotate = Quaternion.Euler(0, angleDelta * i, 0);Vector3 extendDir = (randRotate * obstacleToPlayer).normalized;Vector3 tempPos;if (Vector3.Dot(extendDir, obstacleToPlayer) <= threshold){caculateFinished = true;tempPos = targetPos;}else{tempPos = obstaclePos + extendDir * aroundRadius;}pathPoints.Add(tempPos);++i;} while (!caculateFinished);pathPoints.Add(targetPos);}
3:在推屎过程中出现不可抗拒因素,即时使用Update计算获取新的推屎路线,
哈哈啊哈~~~~~
这篇关于unity 圆形障碍,避障算法,动态避障,静态避障,屎壳郎推屎回娘家的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!