T04_unity坦克移动 c#

首先创建一个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;
        }
    }
}
运行效果为

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

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值