小游戏04—《坦克导航》

接下来我们布置场景,我们的预期结果(功能分析)是:

        坦克沿路径循环移动 

首先进入资源商店准备下载角色模型资源,

搜索Rocket

选择场景里的Desert_land_2场景模板 放入Hierarchy,完全解压缩后再拖拽至场景中,

移动资源场景物体后,将导入场景删除,

选择地形中第50块砖ctrl + d 后将空缺连接成循环回路,

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

并起名字叫WayPoint

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

将小球位置归零,

创建预制体文件夹Prefabs,并将路径点WayPoint放进预制体文件夹,删除场景中的WayPoint,

将坦克物体的子物体摄像机Camera拖拽出来,

删除坦克物体自带脚本,

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

将坦克对象起名字为Tank,

将小球预制体添加Material组件设置为红色红,拖拽至场景中,

 将小球改名为WayPoint0

ctrl + d 复制  改名为WayPoint1

ctrl + d 复制  改名为WayPoint2

ctrl + d 复制  改名为WayPoint3

ctrl + d 复制  改名为WayPoint4

ctrl + d 复制  改名为WayPoint5,构成循环回路

在WayPoint0路径点0右键创建空父物体命名为PathA路径A,

将其他路径点1-5拖拽至PathA作为子物体,

命名为PathA路径A,

新建脚本命名为导航Navigation

双击脚本编写代码:

using UnityEngine;
public class Navigation : 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("查找路径点父物体失败,仔细检查父物体名字");
    }
    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;
        }
    }
}

将导航脚本挂载在Tank物体上,

观察PathA路径是否0-5顺序进行,

注意:WayPoint路径点由上至下执行,注意摆放顺序

最后关闭路径点的渲染,

运行即按照规定路径导航,

End.

  • 19
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值