unity实现简单坦克对战
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实现简单坦克对战相关推荐
- openFrameworks实现的简单坦克对战游戏-Tank War
开发环境:windows.vs2019.of_v0.11.2_vs2017_release. 下载地址:https://download.csdn.net/download/qq_31412239 ...
- canvas+js实现简单的双人坦克对战小游戏
相信有很多人对坦克大战的游戏模仿很有兴趣,在实现经典的坦克大战之前,我先写了个双人的坦克对战,实现了基本的对战功能.下面就开始介绍游戏的编写. 首先创建一个基本的html文件,添加canvas标签以实 ...
- 作业十: 坦克对战游戏 AI 设计
坦克对战游戏 AI 设计 从商店下载游戏:"Kawaii" Tank 或 其他坦克模型,构建 AI 对战坦克.具体要求 使用"感知-思考-行为"模型,建模 AI ...
- 从零点五开始用Unity做半个2D战棋小游戏(完)
好久不见. 这是第29篇与游戏开发有关的文章. | 写在最前 这次想要做一个简单且传统的战棋小游戏,大概的玩法是:在2D世界里创建一张由六边形地块组成的战斗地图,敌我双方在地图上轮流行动,并向对方发动 ...
- 手把手教你用Java实现一个简易联网坦克对战小游戏
作者:炭烧生蚝 cnblogs.com/tanshaoshenghao/p/10708586.html 介绍 通过本项目能够更直观地理解应用层和运输层网络协议, 以及继承封装多态的运用. 网络部分是本 ...
- Java实现简易联网坦克对战小游戏(内涵源码)//Java+Java游戏+拓展学习+资源分享
介绍 通过本项目能够更直观地理解应用层和运输层网络协议, 以及继承封装多态的运用. 网络部分是本文叙述的重点, 你将看到如何使用Java建立TCP和UDP连接并交换报文, 你还将看到如何自己定义一个简 ...
- java怎么实现网络对战平台_手把手教你用Java实现一个简易联网坦克对战小游戏...
介绍 通过本项目能够更直观地理解应用层和运输层网络协议, 以及继承封装多态的运用. 网络部分是本文叙述的重点, 你将看到如何使用Java建立TCP和UDP连接并交换报文, 你还将看到如何自己定义一个简 ...
- 3D游戏制作——AI坦克对战
3D游戏制作--AI坦克对战 github地址(码云) https://gitee.com/jenny_s/AITank-3Dgame 游戏视频 https://www.bilibili.com/vi ...
- java联机_Java实现简易联网坦克对战小游戏
介绍 通过本项目能够更直观地理解应用层和运输层网络协议, 以及继承封装多态的运用. 网络部分是本文叙述的重点, 你将看到如何使用Java建立TCP和UDP连接并交换报文, 你还将看到如何自己定义一个简 ...
最新文章
- 网页页面设计如何做到极致舒适感?
- mysql -s 参数_mysqldump 的常用参数。
- 单例设计模式-容器单例
- Notification之 - Android5.0实现原理(二)
- 手机uc怎么放大页面_手机网站怎样做可以提高用户体验度?——竹晨网络
- 第一次执行时没有问题,重复执行会出错、GP循环
- python 编码解码原理_Python的编码解码问题
- 【HHHOJ】NOIP模拟赛 捌 解题报告
- IBM Machine Learning学习笔记(一)——Exploratory Data Analysis for Machine Learning
- 计算机一级选择题电子档,计算机一级考试选择题
- VS2010快捷键大全
- PostgreSQL视图和物化视图
- 仲裁器设计(4)Weighted Round Robin
- vue移动端上传文件插件_轻量级Vue图片上传插件——Vue-core-image-Upload
- Taven教授:解决失眠的好办法
- MultiTech MT9234ZBA 调制解调器Modem的测试方法
- 关于 SONY WF1000XM3 在 Windows 10 下蓝牙连接只有 Handfree 没有 Stereo 模式
- 字符串前面添加u,r,b的含义
- android指南针程序,如何在Android上制作精确的指南针
- 怎么快速学习英语的诀窍