unity3D期末大作业,坦克射击游戏

unity3D期末大作业,坦克射击游戏

坦克射击游戏,可以发射子弹打击物体,坦克可以撞碎墙壁,树木,有背景音效详情如下动态图:(下载链接在文章末
在这里插入图片描述

制作过程:

首先,从Asset Store中下载并import整个Kawaii Tank

然后,为了保证这个包内的素材正常工作,我们需要同时import Standard Asset

最后,我们导入Kawaii Tank 的包中Scenes中的Test_Field场景,在该场景上添加一些元素,即可制作为我们的游戏地图。(AI坦克在凹凸不平的地面上运动非常容易出错,建议避免进入凹凸不平的地面)

设计AI

本次坦克AI设计的主要实现了两个功能:

  1. 路径规划
  2. 攻击控制

路径规划

路径规划主要使用unity自带的Nav Mesh Agent控件来完成

首先,我们在每个AI坦克的MainBody组件上添加Nav Mesh Agent控件,不需要修改设置,保持默认就好。

然后,我们进入Navigation页面,点击Bake按钮,对整个地图进行识别

最后,我们需要使用脚本来实现追踪。因此,我们创建如下脚本,并将其添加到AI坦克的MainBody上。

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.AI;

public class PlaceTarget : MonoBehaviour
{
    float count;
    public GameObject target;  //获取目标点,注意在面板中赋值
    NavMeshAgent mr;   //声明变量
                       // Use this for initialization
    void Start()
    {
        count = 0;
        //获取到自身的NavMeshAgent组件
        mr = GetComponent<NavMeshAgent>();
    }

    // Update is called once per frame
    void Update()
    {
        count += Time.deltaTime;
        while (count > 1)
        {
            //使用属性将目标点的坐标进行传递
            //mr.destination = target.transform.position;
            //使用方法获取目标点坐标,,和前一行代码作用相同
            mr.ResetPath();
            mr.SetDestination(target.transform.position);

            count = 0;
        }

    }
}

注意:每个AI坦克的target属性需要手动设置,设置的时候建议设置为玩家坦克的Mainbody组件,保证能正常跟踪。

然后为了实现简单,开始游戏后坦克就会不断追踪玩家。

攻击控制

攻击控制,我们则使用碰撞器来实现,思路类似于巡逻兵作业中的实现。为此,我们需要修改TankAI/MainBody/Turret_Base/Cannon_Base组件,及其上的脚本Fire_Control_CS.cs

首先,我们将玩家坦克对象的MainBody的tag设置为Player

然后,我们为Cannon_Base组件添加Box Collider碰撞器(注意Is Trigger那一栏需要勾选),将碰撞器设置为长方形,使其更易识别到前后的敌人

然后,就是修改控制脚本Fire_Control_CS.cs

...
void Update()
{
    if (idScript.isPlayer)
    {
        // 当对象是玩家时
        #if UNITY_ANDROID || UNITY_IPHONE
            Mobile_Input ();
        #else
            Desktop_Input();
        #endif
    }
    else
    {
        // 当对象是AI坦克时,每隔三秒发射一颗子弹
        count = count + Time.deltaTime;
        if (count > 3.0f && canFire)
        {
            Fire();
            count = 0;
        }
    }
}

...
    
void OnTriggerEnter(Collider collider)
{
    // 当识别到对方是玩家坦克时,打开开火开关
    if (collider.gameObject.tag == "Player")
    {
        Debug.Log("catch");
        target = collider.gameObject.transform;
        canFire = true;
    }
}
....

最后,将脚本挂载到AI坦克的Cannon Base组件上,即可实现攻击控制。

PS:为了降低难度,这里的AI坦克只能朝自己正前方发射子弹,但是也足够难玩了。

除了上述内容之外,我还参考师兄的博客实现了血量到达0之后坦克消失等操作,不过因为不是重点,这里就不过多描述了。

资源下载链接:

https://download.csdn.net/download/weixin_43474701/20306200

  • 4
    点赞
  • 82
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

编程ID

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值