首先创建一个3D项目,并给项目起一个名字

unity 小球下落进洞 unity小球移动_数组

然后进入商店

unity 小球下落进洞 unity小球移动_unity_02

选择需要下载的资源,将资源导入 

 

unity 小球下落进洞 unity小球移动_游戏引擎_03

选择场景里的Desert_land_2场景模板 放入Hierarchy

unity 小球下落进洞 unity小球移动_unity_04

 选择主摄像机将场景对象对齐

unity 小球下落进洞 unity小球移动_游戏引擎_05

 接着修改场景选择第50块地砖ctrl + d 复制右移动至右侧使地形可以构成回路

unity 小球下落进洞 unity小球移动_数组_06

 我们通过使小球作为引导使坦克进行导航,所以先创建3D小球作为预制体引导

unity 小球下落进洞 unity小球移动_数组_07

并起名字叫WayPoint

unity 小球下落进洞 unity小球移动_数组_08

 为了防止小球本身带的碰撞器使坦克产生力的作用,将碰撞器组件在小球身上移除

unity 小球下落进洞 unity小球移动_unity_09

将小球位置归零

unity 小球下落进洞 unity小球移动_游戏引擎_10

 接下来我们创建一个材质使小球拥有颜色,首先在Assets先创建个文件夹名为Materials(材质)

unity 小球下落进洞 unity小球移动_数组_11

然后右键文件夹创建一个材质

unity 小球下落进洞 unity小球移动_数组_12

 并且起个名字WayPoint

unity 小球下落进洞 unity小球移动_游戏引擎_13

修改材质颜色

unity 小球下落进洞 unity小球移动_游戏引擎_14

 选择预制体小球右侧拖拽材质到添加组件区域,使小球成为红色

unity 小球下落进洞 unity小球移动_数组_15

创建一个预制体文件夹

unity 小球下落进洞 unity小球移动_游戏引擎_16

将预制体WayPoint拖拽至Prefabs文件夹 ,将原物体删除

unity 小球下落进洞 unity小球移动_游戏引擎_17

 对坦克GB_piercer_2_free完全解压缩

unity 小球下落进洞 unity小球移动_游戏引擎_18

将坦克内部摄像机拽出去

unity 小球下落进洞 unity小球移动_游戏引擎_19

 之后将坦克身上的背包脚本移除掉

unity 小球下落进洞 unity小球移动_游戏引擎_20

将坦克组件里血条组件删除

unity 小球下落进洞 unity小球移动_拖拽_21

将坦克对象起名字为Tank

unity 小球下落进洞 unity小球移动_拖拽_22

将小球预制体拖拽至场景中

unity 小球下落进洞 unity小球移动_游戏引擎_23

 将小球改名为WayPoint0

unity 小球下落进洞 unity小球移动_unity_24

ctrl + d 复制  改名为WayPoint1

unity 小球下落进洞 unity小球移动_unity_25

 ctrl + d 复制 改名为WayPoint2

unity 小球下落进洞 unity小球移动_拖拽_26

  ctrl + d 复制 改名为WayPoint3

unity 小球下落进洞 unity小球移动_游戏引擎_27

 ctrl + d 复制 改名为WayPoint4

unity 小球下落进洞 unity小球移动_数组_28

  ctrl + d 复制 改名为WayPoint5

unity 小球下落进洞 unity小球移动_数组_29

检查预制体隐藏开关是否完全控制所有小球

unity 小球下落进洞 unity小球移动_unity 小球下落进洞_30

 

unity 小球下落进洞 unity小球移动_游戏引擎_31

创建脚本文件夹

unity 小球下落进洞 unity小球移动_数组_32

 脚本名为FollowPathMove

unity 小球下落进洞 unity小球移动_数组_33

 之后将脚本挂在坦克身上

unity 小球下落进洞 unity小球移动_拖拽_34

接着对WayPoint0创建一个空物体

unity 小球下落进洞 unity小球移动_unity_35

起名字为PathA

unity 小球下落进洞 unity小球移动_游戏引擎_36

 接着将WayPoint1-5都放进PathA中

unity 小球下落进洞 unity小球移动_拖拽_37

当运行出现下面的界面PathA就是找对了

unity 小球下落进洞 unity小球移动_unity 小球下落进洞_38

 将以下代码复制

using System.Collections;
 using System.Collections.Generic;
 using UnityEngine;public class FollowPathMove : MonoBehaviour
 {
     //路径点数组
     public Transform[] waypointArray;
     public float speed = 0.015f;   //坦克移动速度
     public int currentIndex = 0;   //当前路径下标
     void Start()
     {
         //全局查找物体
         Transform path = GameObject.Find("PathA").transform;
         if (path != null)
         {
             //print(path.childCount);
             //给数组开辟内存
             waypointArray = new Transform[path.childCount];
             //将每一个路径点保存到数组中
             for (int i = 0; i < waypointArray.Length; i++)
             {
                 waypointArray[i] = path.GetChild(i);
             }
         }
         else
         {
             Debug.LogError("查找路径点父物体失败,仔细检查父物体名字");
         }
     }
     private void Update()
     {
         //transform.Translate(Vector3.forward * Time.deltaTime * 2f);
         //通过算法给坦克纠正方向
         //方向向量
         Vector3 direction = waypointArray[currentIndex].position - transform.position;
         transform.rotation = Quaternion.Slerp(transform.rotation, Quaternion.LookRotation(direction), 0.1f);
         transform.Translate(Vector3.forward * speed);
         if (direction.sqrMagnitude < 0.1f)
         {
             currentIndex++;
             if (currentIndex > waypointArray.Length - 1)
                 currentIndex = 0;
         }
     }
 }


运行效果为

unity 小球下落进洞 unity小球移动_unity_39

需求:坦克沿路径循环移动