Unity尝试制作王者荣耀笔记(五)用自带导航系统控制小兵移动

编程入门 行业动态 更新时间:2024-10-21 23:05:47

Unity尝试制作王者<a href=https://www.elefans.com/category/jswz/34/1767204.html style=荣耀笔记(五)用自带导航系统控制小兵移动"/>

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尝试制作王者荣耀笔记(五)用自带导航系统控制小兵移动

本文发布于:2024-02-26 08:56:48,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1701943.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:荣耀   自带   小兵   王者   导航系统

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!