荣耀笔记(五)用自带导航系统控制小兵移动"/>
Unity尝试制作王者荣耀笔记(五)用自带导航系统控制小兵移动
首先创建可行走的路径进行静态导航烘焙
烘焙结果:
烘焙好路线之后,让小兵行走,我们在生成小兵时告知小兵行走的目标点,这个小兵是我方小兵,所以行走目标点是敌方塔:脚本如下:
小兵身上脚本:
using UnityEngine;
using System.Collections;public class CreatSoldier : MonoBehaviour {[SerializeField]GameObject soliderPrefab;[SerializeField]Transform startTran;[SerializeField]Transform soliderParent;//是否生成小兵默认为truebool isCreateSolider = true;//生成小兵的数量public int soliderCount;//虽然目标点对象不能直接托给预制体,但是可以在创建预制体的时候给他赋值[SerializeField]Transform[] towers;private void Start(){StartCoroutine(Create(0,1,5));}//生成一个小兵/// <summary>/// 小兵生成的位置/// 小兵需要到达的目标点/// </summary>/// <param name="startTran"></param>/// <param name="towers"></param>void CreateSmartSolider(Transform startTran ,Transform[] towers){GameObject obj= Instantiate(soliderPrefab, startTran.position,Quaternion.identity)as GameObject;obj.transform.parent = soliderParent;//生成的小兵指定父物体//给生成的小兵指定目标点对象,SmartSolider solider = obj.GetComponent<SmartSolider>();solider.towers = towers;}//协程生成一波一波小兵/// <summary>/// </summary>/// <param name="time">游戏开始后几秒开始生成士兵</param>/// <param name="delyTime">同一波内两个小兵生成的间隔</param>/// <param spwanTime="">下一波小兵生成的时间间隔</param>/// <returns></returns>IEnumerator Create(float time,float delyTime,float spwanTime){yield return new WaitForSeconds(time);while (isCreateSolider){//一个for循环代表一波小兵for (int i=0;i<soliderCount;i++){CreateSmartSolider(startTran,towers);yield return new WaitForSeconds(delyTime);}//等待下一波小兵生成的时间yield return new WaitForSeconds(spwanTime);}}
}
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.AI;public class SmartSolider : MonoBehaviour {public Transform target;private Animation ani;private NavMeshAgent nav;public Transform[] towers;// Use this for initializationvoid Start () {nav = GetComponent<NavMeshAgent>();ani = GetComponent<Animation>();}// Update is called once per framevoid Update () {SoliderMove();}void SoliderMove(){if (target==null){//目标点为空,需要寻找一下目标点target = GetTarget();return;}ani.CrossFade("Run");nav.SetDestination(target.position);}//假如小兵跑向的目标点是塔Transform GetTarget(){for (int i=0;i<towers.Length;i++){if (towers[i]!=null){return towers[i];}}return null;}
}
更多推荐
Unity尝试制作王者荣耀笔记(五)用自带导航系统控制小兵移动
发布评论