码迷,mamicode.com
首页 > 其他好文 > 详细

U3D navmesh寻路简单示范

时间:2015-12-21 18:16:19      阅读:463      评论:0      收藏:0      [点我收藏+]

标签:

要求:放置一个BOSS,创建几个路标,自动循环这几个路标形成回路,变成自动巡逻,并配合animator系统的控制开关控制BOSS的动作

1.先设置好BOSS 中animator的控制开关,只看Run和Idle之间的联系,设置一个BOOL变量“isMove”进行控制(其他动作联系是我设置的其他攻击控制和使用技能控制,不必注意)

逻辑很简单,isMove为真,Idle向Run,isMove为假,Run向Idle, 把Idle设置为默认状态

l技术分享

 

2.在层次面板下创建一个空物体,改名为wayPoints,然后在其下创建5个子的空物体,分别为wayPoints01,02,03,04,05 表示BOSS将要巡逻的五个点

技术分享

3.在Windows目录下点击navigation,打开这个系统,设置好相关属性之后,点击bake,如图,已经烘培好了可寻路的范围(蓝色部分)

技术分享

4.在BOSS下添加一个NavMeshAgent的组件,并创建一个脚本,进行使用

技术分享

技术分享

 


using UnityEngine;
using System.Collections;

public class nuoshouMove : MonoBehaviour {
    public Transform[] wayPoints;

    private int index=0;//设置一个标志位。他默认自动巡逻的标识

    //到一个点后休息8S时间
    public float stopTime=8f;
    public float timer=0;


    //引用自己和navmeshagent组件,动作组件
    private NavMeshAgent nav;

private Animator ani; void Awake(){ ani = this.GetComponent<Animator> (); } // Use this for initialization void Start () { nav = this.GetComponent<NavMeshAgent> (); view = this.GetComponent<nuoshouView> (); nav.destination =wayPoints [index].position;//一开始就走向第一个点 } // Update is called once per frame void Update () { moving(); //走向设置好的五个点 if (nav.remainingDistance < 0.2f) { //到点后休息一段时间 ani.SetBool("isMove",false); timer+=Time.deltaTime;//开始计时 if(timer>=stopTime){ index++; index%=5;//利用求余运算,进行循环 ani.SetBool("isMove",true); nav.destination=wayPoints[index].position; timer=0;//计时器归零 } } } void moving(){ //ismove设为真,播放走这个动作 ani.SetBool ("isMove", true); nav.destination = wayPoints [index].position;//走向目标位置 } }

 

 

U3D navmesh寻路简单示范

标签:

原文地址:http://www.cnblogs.com/pnzpb/p/5064043.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!