首先创建一个3D项目,并给项目起一个名字
然后进入商店
选择需要下载的资源,将资源导入
选择场景里的Desert_land_2场景模板 放入Hierarchy
选择主摄像机将场景对象对齐
接着修改场景选择第50块地砖ctrl + d 复制右移动至右侧使地形可以构成回路
我们通过使小球作为引导使坦克进行导航,所以先创建3D小球作为预制体引导
并起名字叫WayPoint
为了防止小球本身带的碰撞器使坦克产生力的作用,将碰撞器组件在小球身上移除
将小球位置归零
接下来我们创建一个材质使小球拥有颜色,首先在Assets先创建个文件夹名为Materials(材质)
然后右键文件夹创建一个材质
并且起个名字WayPoint
修改材质颜色
选择预制体小球右侧拖拽材质到添加组件区域,使小球成为红色
创建一个预制体文件夹
将预制体WayPoint拖拽至Prefabs文件夹 ,将原物体删除
对坦克GB_piercer_2_free完全解压缩
将坦克内部摄像机拽出去
之后将坦克身上的背包脚本移除掉
将坦克组件里血条组件删除
将坦克对象起名字为Tank
将小球预制体拖拽至场景中
将小球改名为WayPoint0
ctrl + d 复制 改名为WayPoint1
ctrl + d 复制 改名为WayPoint2
ctrl + d 复制 改名为WayPoint3
ctrl + d 复制 改名为WayPoint4
ctrl + d 复制 改名为WayPoint5
检查预制体隐藏开关是否完全控制所有小球
创建脚本文件夹
脚本名为FollowPathMove
之后将脚本挂在坦克身上
接着对WayPoint0创建一个空物体
起名字为PathA
接着将WayPoint1-5都放进PathA中
当运行出现下面的界面PathA就是找对了
将以下代码复制
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;
}
}
}
运行效果为
需求:坦克沿路径循环移动