Unity_塔防固定路线_060

来源:互联网 发布:windows系统制作mac 编辑:程序博客网 时间:2024/06/04 19:58

固定路线的寻路一般在塔防游戏中出现的比较多。
效果如下:
这里写图片描述
下面我们来看以下固定路线的实现:

using UnityEngine;using System.Collections;using System;public class Move : MonoBehaviour {    //保存所有的路点    public GameObject[] points;    //记录下一个即将到达的路点    int currentPointIndex = 1;    Vector3 direction = Vector3.zero;    // Use this for initialization    void Start () {        //获取所有的路点        points = GameObject.FindGameObjectsWithTag("PathPoint");        //上面的方法获取到的路点在数组中保存的顺序是降序的,我们使用Sort重新排序  Sort默认是升序状态  我们也可以使用Reverse 反转数组  里面使用的Lambda表达式排序        Array.Sort(points,(x,y)=> { return x.name.CompareTo(y.name); });        //设置游戏对象的起始位置        transform.position = points[0].transform.position;        //设置游戏对象的方向        direction = GetDirection(transform.position, points[1].transform.position);        //游戏对象方向的标准化        transform.forward = direction.normalized;    }    // Update is called once per frame    void Update () {        //当游戏对象的位置距离目标点还有0.1m的时候        if (Vector3.Distance(transform.position, points[currentPointIndex].transform.position)<0.1f)        {            //设置目标点为游戏对象自身的位置            transform.position = points[currentPointIndex].transform.position;            //判断有没有下一个目标点            if (currentPointIndex+1<points.Length)            {                currentPointIndex++;            }        }        if (transform.position != points[points.Length-1].transform.position)        {   //玩家移动的方向            direction = GetDirection(transform.position, points[currentPointIndex].transform.position);            transform.forward = direction.normalized;            transform.Translate(Vector3.forward * 10 * Time.deltaTime);        }        else        {            transform.position = points[points.Length - 1].transform.position;            //transform.forward = direction.normalized;        }    }    //得到一个实时的方向    Vector3 GetDirection(Vector3 v1,Vector3 v2)    {        return v2 - v1;    }}
原创粉丝点击