坦克对战游戏 AI 设计
坦克对战游戏 AI 设计
从商店下载游戏:“Kawaii” Tank 或 其他坦克模型,构建 AI 对战坦克。具体要求
使用“感知-思考-行为”模型,建模 AI 坦克
感知是 agent 接收世界信息的行为,其获取的数据将是思考的输入。在游戏中,程序是可以获得游戏世界任意信息的,设计一个“干死”玩家的算法通常是比较容易的,因此如何限制信息获取是设计不同级别 agent 的核心问题。
鉴于这是一个坦克对战游戏,因此有雷达存在,视觉听觉和嗅觉都不满足要求。只要玩家在地图上出现,就会被AI坦克的雷达扫描到。
思考 就是算法,它的输入是感知的数据,输出是行为(behaviours)。 思考的算法,通常就是我们所说的游戏规则的一部分,即 agent 能做什么,该做什么。
当AI坦克扫描到玩家时,需要判断是否有遮挡,有遮挡则会绕行,否则直接开火。
行动将思考(Think)的结果作为输入,该部分的任务就是使得 agent 行为更符合物理世界的规律,使得“心想事成”这样理想的结果变得不确定。
如果思考得到的结果是绕行,那么做出改变方向的行动;如果思考结果是开火,则发射子弹。子弹是刚体,受重力影响。
场景中要放置一些障碍阻挡对手视线
放置一些房子来阻挡视线
坦克需要放置一个矩阵包围盒触发器,以保证 AI 坦克能使用射线探测对手方位
kawaii tank自带的场景中已经设置好触发器
AI 坦克必须在有目标条件下使用导航,并能绕过障碍。(失去目标时策略自己思考)
通过NavMesh实现这个功能
实现人机对战
打开Kawaii_Tank中的Test_Field场景。
多添加几个房子作为遮挡,另外为了增加难度可以多放置几个AI坦克
为AI坦克添加组件Nav Mesh Agent
为每个AI坦克的mainbody挂载以下代码,并在Inspector界面设置AI坦克的target为玩家坦克的mainbody
using System.Collections; using System.Collections.Generic; using UnityEngine; using UnityEngine.AI;public class AddTarget : MonoBehaviour {public GameObject target;NavMeshAgent mr;void Start(){mr = GetComponent<NavMeshAgent>();}// Update is called once per framevoid Update(){mr.SetDestination(target.transform.position);} }
修改Fire_Control_CS.cs的代码,令AI坦克也可开枪
void Update (){if (idScript.isPlayer) {#if UNITY_ANDROID || UNITY_IPHONEMobile_Input ();#elseDesktop_Input ();#endif}else{// 游戏加载出来的三秒后AI坦克第一轮开火if (isReady && Time.realtimeSinceStartup>startTime+3.0f) {Fire ();}}}
修改Damage_Control_CS.cs中的代码,使得AI坦克被打败后消失。在Start_Destroying中加入以下代码:
if(idScript.isPlayer == false) {this.gameObject.SetActive(false); }
修改Wheel_Control_CS.cs中的Desktop_Input函数,提高玩家坦克的速度
if (Input.GetKeyDown (KeyCode.UpArrow) || Input.GetKeyDown (KeyCode.W)) {speedStep += 3.0f; // 0.5f -> 3.0fspeedStep = Mathf.Clamp (speedStep, -1.0f, 1.0f); } else if (Input.GetKeyDown (KeyCode.DownArrow) || Input.GetKeyDown (KeyCode.S)) {speedStep -= 3.0f; // 0.5f -> 3.0fspeedStep = Mathf.Clamp (speedStep, -1.0f, 1.0f); } else if (Input.GetKeyDown (KeyCode.X)) {speedStep = 0.0f; }
打开window -> AI -> Navigation
将场景中的Terrain设置为
将场景中的所有房子设置为:
- 点击bake按钮,生成Navmesh
坦克对战游戏 AI 设计相关推荐
- 作业十: 坦克对战游戏 AI 设计
坦克对战游戏 AI 设计 从商店下载游戏:"Kawaii" Tank 或 其他坦克模型,构建 AI 对战坦克.具体要求 使用"感知-思考-行为"模型,建模 AI ...
- 【3D游戏】坦克对战游戏AI设计
坦克对战游戏 AI 设计 从商店下载游戏:"Kawaii" Tank 或 其他坦克模型,构建 AI 对战坦克.具体要求 使用"感知-思考-行为"模型,建模 AI ...
- 【Unity3D】坦克对战游戏 AI 设计
作业要求 从商店下载游戏:"Kawaii" Tank 或 其他坦克模型,构建 AI 对战坦克.具体要求 使用"感知-思考-行为"模型,建模 AI 坦克 场景中要 ...
- Unity3d--坦克对战游戏 AI 设计
一.作业要求 从商店下载游戏:"Kawaii" Tank 或 其他坦克模型,构建 AI 对战坦克.具体要求 使用"感知-思考-行为"模型,建模 AI 坦克 场景 ...
- 游戏 AI 设计之 FSM 有限状态机
FSM 有限状态机 一.概述 有限状态机(finite-state machine,缩写:FSM)又称有限状态自动机(finite-state automaton,缩写:FSA),简称状态机,是表示有 ...
- 端午节-怀念1996之QB45坦克对战游戏
又是一个端午节,真的老了.坐在计算机边,打开VirtualBox,启动Windows 3.2, 再玩一把坦克对战游戏. 这是1996年端午节前后写的程序.当时备战高考,被题海战术弄得身心俱疲,模拟考试 ...
- 阐述游戏AI设计的两个禁忌及解决方法
此文转自游戏帮,勉励下自己 作者:Jon Shafer 我在过去年几负责了多款游戏的AI设计工作,我从中收获的一个最基本,可能也是最令人沮丧的经验就是:创建一个出色的AI真是出奇地困难.不但制作一个符 ...
- java2048ai,2048小游戏ai设计
感谢我的朋友许博瑀,他一定要赞助我个域名,于是网站改为以下地址: >>>>>>>>>>>>>>>>> ...
- openFrameworks实现的简单坦克对战游戏-Tank War
开发环境:windows.vs2019.of_v0.11.2_vs2017_release. 下载地址:https://download.csdn.net/download/qq_31412239 ...
最新文章
- Oracle调优综述
- Windows Server 2012 从入门到精通系列之如何提高DC持续性?
- mysql提示太多连接_mysql数据库提示连接太多怎么办
- python实践心得体会_“Python自然语言实践”——总结(一),实战
- elasticsearch pinyin 拼音分词器
- jqAutoComplete 和 knockout
- java笔试题(题目+解析)
- 矩阵键盘mega16 c语言程序,51单片机对矩阵键盘实现16个按键操作的电路设计
- wordpress函数手册_WordPress中文手册文档
- 电阻单位符号Ω怎么读?
- “多模态视频人物识别”课程分享学习总结
- 深挖Openstack Nova - evacuate疏散函数
- Python 爬取微信公众号文章
- 阿里技术专家的编程方法论:如何写出一手漂亮的代码?
- selenium 批量下载qq邮箱附件
- 锐龙r7 5800x怎么样 相当于什么水平
- aliPay支付宝APP支付操作流程
- bu薪水 华为cloud_【华为】CLOUDBU 华为云数据库工程师招聘 - 软件与微电子学院(SSM)版 - 北大未名BBS...
- 研究下php加密混淆,解析php混淆加密解密的手段,如 phpjm,phpdp神盾
- “一阶数字低通滤波器”原理推导(含仿真和代码实现)
热门文章
- http://www.cnblogs.com/alcc/p/Allc.html
- 这才是B站的正确打开方式!
- 嵌入式开发入门之经典 ARM开发板
- 常用的库代码段pytorch_based【tips】
- 华师计算机学院2014级,华师,新生早知道
- idea 实时更新网页内容(修改代码同时刷新网页即可同步内同)
- Ora-24067: exceeded maximum number of subscribers for queue
- html css设置文本溢出隐藏
- 【论文查询】如何查询论文被其他哪些文献引用过?超详细!!!
- 本地连接ipv4无网络访问权限解决办法