void GetNewWayPoint()
{
remainLookAtTime = lookAtTime;
float randomX = Random.Range(-partolRange, partolRange);
float randomZ = Random.Range(-partolRange, partolRange);
//会根据角色当前位置的一定范围进行随机移动
//Vector3 randomPint = new Vector3(transform.position.x + randomX, transform.position.y, transform.position.z + randomZ);
Vector3 randomPoint = new Vector3(guardPos.x + randomX, transform.position.y, guardPos.z + randomZ);
NavMeshHit hit;
wayPoint = NavMesh.SamplePosition(randomPoint, out hit, partolRange, 1) ? hit.position : transform.position;
}
private Vector3 guardPos;
private void Awake()
{
guardPos = transform.position;
}
partolRange是自己定义的范围,guardPos是获得角色初始位置需要在Awake里面进行初始化,这样才能让后面的randomPoint找点的范围固定,而不是变化的。如果randomPoint用注释的方法写角色会在移动后的范围内选点进行移动,而不是在角色初始的范围内进行移动。为了让随机到的点在可走的范围内,需要用NavMesh里面的函数解决。如果不用这个函数可能会出现选的点在不可走的区域内,可能会选到树里面。
文章来源:https://www.toymoban.com/news/detail-526357.html
在移动后还要进行判断是否到随机选择的点,可能第二次随机的点距离第一随机的点很近。文章来源地址https://www.toymoban.com/news/detail-526357.html
if (Vector3.Distance(wayPoint, transform.position) <= agent.stoppingDistance)
{
GetNewWayPoint();
}
else
{
agent.destination = wayPoint;
}
到了这里,关于unity在一定范围内进行随机移动的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!