unity在一定范围内进行随机移动

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里面的函数解决。如果不用这个函数可能会出现选的点在不可走的区域内,可能会选到树里面。

        在移动后还要进行判断是否到随机选择的点,可能第二次随机的点距离第一随机的点很近。

if (Vector3.Distance(wayPoint, transform.position) <= agent.stoppingDistance)
{
    GetNewWayPoint();
}
else
{
    agent.destination = wayPoint;
}

猜你喜欢

转载自blog.csdn.net/qq_62837200/article/details/127489489