unity实现简单坦克对战

游戏要求

  • 使用“感知-思考-行为”模型,建模 AI 坦克
  • 场景中要放置一些障碍阻挡对手视线
  • 坦克需要放置一个矩阵包围盒触发器,以保证 AI 坦克能使用射线探测对手方位
  • AI 坦克必须在有目标条件下使用导航,并能绕过障碍。(失去目标时策略自己思考)
  • 实现人机对战

实现过程

首先先从资源商店下载坦克模型,本次采用的是“Kawaii” Tank。

将该包导入后,还需要导入standard assets中的CrossPlatformInput,

将“Kawaii” Tank,Scenes里面的Test_Field作为场景。

该场景初始有一辆玩家的坦克和一辆敌方的坦克,还有两幢小房子,为了增加游戏的丰富度和趣味性,我们增加几幢小房子和几辆敌方坦克。

将所有房子Navigation->object中的Navigation Area设置为Not Walkerable,将地面Navigation->object中的Navigation Area设置为Walkerable,这是为了下一步坦克能够顺利自动寻路做铺垫。

实现敌方坦克自动寻路

为所有敌方坦克的main body添加Nav Mesh Agent组件,用于游戏对象的导航。

选择 Navgation 的 Bake 面板,点击下方 Bake 按钮,即会根据可行走区域生成导航网格。

为了使敌方坦克能够追踪目标,需要为其添加脚本,并将玩家的坦克作为target。先添加玩家的坦克标签为Player,

再为所有敌方坦克添加Box Collider组件,勾选Is Trigger选项,作为触发器,并设置好触发器的大小范围后,当玩家坦克进入敌方坦克范围时,会触发相应事件。

编写代码如下,代码很简单,就是当敌方坦克检测到玩家时,会自动导航至玩家所在的位置。

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.AI;public class PlaceTarget : MonoBehaviour
{public GameObject target;NavMeshAgent nav;void Start(){nav = GetComponent<NavMeshAgent>();}void OnTriggerEnter(Collider collider){if (collider.gameObject.tag == "Player"){nav.SetDestination(target.transform.position);}}
}

将该脚本拖到每个敌方坦克中,此时若玩家进入到了敌方坦克范围,坦克就可以进行追踪。而若玩家逃出该范围,坦克便会呆在原地。

使坦克发射炮弹

修改Fire_Control_CS的代码,让敌方坦克也能发射炮弹:

private float i = 0;
private float time = 5f;
void Update ()
{if (idScript.isPlayer) {#if UNITY_ANDROID || UNITY_IPHONEMobile_Input ();#elseDesktop_Input ();#endif} else{i += Time.deltaTime;if(i >= time){Fire();i = 0;}}
}

为了时刻显示玩家的血条,并只有在攻击后才能看到敌方的血条。修改Damage_Control_CS代码如下:

void Update (){if(idScript.isPlayer){displayScript.Get_Damage(durability, initialDurability);}// Destructif (idScript.isPlayer) {#if UNITY_ANDROID || UNITY_IPHONEif (CrossPlatformInputManager.GetButtonDown ("Destruct")) {#elseif (Input.GetKeyDown (KeyCode.Return)) {#endifStart_Destroying ();}}}

由于敌方坦克在没有检测到玩家时并不会移动,而发射炮弹会受到后坐力的影响,因此还需要修改Fire_Control_CS中的代码,后坐力修改如下:

if (idScript.isPlayer) {bodyRigidbody.AddForceAtPosition (-thisTransform.forward * recoilForce * 0.1f, thisTransform.position, ForceMode.Impulse);
}
游戏运行截图


项目地址
视频链接

unity实现简单坦克对战相关推荐

  1. openFrameworks实现的简单坦克对战游戏-Tank War

    ​ 开发环境:windows.vs2019.of_v0.11.2_vs2017_release. 下载地址:https://download.csdn.net/download/qq_31412239 ...

  2. canvas+js实现简单的双人坦克对战小游戏

    相信有很多人对坦克大战的游戏模仿很有兴趣,在实现经典的坦克大战之前,我先写了个双人的坦克对战,实现了基本的对战功能.下面就开始介绍游戏的编写. 首先创建一个基本的html文件,添加canvas标签以实 ...

  3. 作业十: 坦克对战游戏 AI 设计

    坦克对战游戏 AI 设计 从商店下载游戏:"Kawaii" Tank 或 其他坦克模型,构建 AI 对战坦克.具体要求 使用"感知-思考-行为"模型,建模 AI ...

  4. 从零点五开始用Unity做半个2D战棋小游戏(完)

    好久不见. 这是第29篇与游戏开发有关的文章. | 写在最前 这次想要做一个简单且传统的战棋小游戏,大概的玩法是:在2D世界里创建一张由六边形地块组成的战斗地图,敌我双方在地图上轮流行动,并向对方发动 ...

  5. 手把手教你用Java实现一个简易联网坦克对战小游戏

    作者:炭烧生蚝 cnblogs.com/tanshaoshenghao/p/10708586.html 介绍 通过本项目能够更直观地理解应用层和运输层网络协议, 以及继承封装多态的运用. 网络部分是本 ...

  6. Java实现简易联网坦克对战小游戏(内涵源码)//Java+Java游戏+拓展学习+资源分享

    介绍 通过本项目能够更直观地理解应用层和运输层网络协议, 以及继承封装多态的运用. 网络部分是本文叙述的重点, 你将看到如何使用Java建立TCP和UDP连接并交换报文, 你还将看到如何自己定义一个简 ...

  7. java怎么实现网络对战平台_手把手教你用Java实现一个简易联网坦克对战小游戏...

    介绍 通过本项目能够更直观地理解应用层和运输层网络协议, 以及继承封装多态的运用. 网络部分是本文叙述的重点, 你将看到如何使用Java建立TCP和UDP连接并交换报文, 你还将看到如何自己定义一个简 ...

  8. 3D游戏制作——AI坦克对战

    3D游戏制作--AI坦克对战 github地址(码云) https://gitee.com/jenny_s/AITank-3Dgame 游戏视频 https://www.bilibili.com/vi ...

  9. java联机_Java实现简易联网坦克对战小游戏

    介绍 通过本项目能够更直观地理解应用层和运输层网络协议, 以及继承封装多态的运用. 网络部分是本文叙述的重点, 你将看到如何使用Java建立TCP和UDP连接并交换报文, 你还将看到如何自己定义一个简 ...

最新文章

  1. 网页页面设计如何做到极致舒适感?
  2. mysql -s 参数_mysqldump 的常用参数。
  3. 单例设计模式-容器单例
  4. Notification之 - Android5.0实现原理(二)
  5. 手机uc怎么放大页面_手机网站怎样做可以提高用户体验度?——竹晨网络
  6. 第一次执行时没有问题,重复执行会出错、GP循环
  7. python 编码解码原理_Python的编码解码问题
  8. 【HHHOJ】NOIP模拟赛 捌 解题报告
  9. IBM Machine Learning学习笔记(一)——Exploratory Data Analysis for Machine Learning
  10. 计算机一级选择题电子档,计算机一级考试选择题
  11. VS2010快捷键大全
  12. PostgreSQL视图和物化视图
  13. 仲裁器设计(4)Weighted Round Robin
  14. vue移动端上传文件插件_轻量级Vue图片上传插件——Vue-core-image-Upload
  15. Taven教授:解决失眠的好办法
  16. MultiTech MT9234ZBA 调制解调器Modem的测试方法
  17. 关于 SONY WF1000XM3 在 Windows 10 下蓝牙连接只有 Handfree 没有 Stereo 模式
  18. 字符串前面添加u,r,b的含义
  19. android指南针程序,如何在Android上制作精确的指南针
  20. 怎么快速学习英语的诀窍

热门文章

  1. 智能会议平板:华为虎口夺食MAXHUB
  2. pytorch embedding层详解(从原理到实战)
  3. 傻白探索Chiplet,一些相关术语和问题记录(二)
  4. 墨画子卿第四章第2节:如意随心
  5. java实现输入日期
  6. Android 仿doodle jump小游戏
  7. 截止2021年4月最全全国2800多个学校的图标logo打包,全国大学校徽logo
  8. 关于Web 网页设计规范
  9. 时间序列网络RNN,LSTM入门
  10. oracle 主要特点是,Oracle PL/sql 主要特点