坦克对战游戏 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 设计相关推荐

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

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

  2. 【3D游戏】坦克对战游戏AI设计

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

  3. 【Unity3D】坦克对战游戏 AI 设计

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

  4. Unity3d--坦克对战游戏 AI 设计

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

  5. 游戏 AI 设计之 FSM 有限状态机

    FSM 有限状态机 一.概述 有限状态机(finite-state machine,缩写:FSM)又称有限状态自动机(finite-state automaton,缩写:FSA),简称状态机,是表示有 ...

  6. 端午节-怀念1996之QB45坦克对战游戏

    又是一个端午节,真的老了.坐在计算机边,打开VirtualBox,启动Windows 3.2, 再玩一把坦克对战游戏. 这是1996年端午节前后写的程序.当时备战高考,被题海战术弄得身心俱疲,模拟考试 ...

  7. 阐述游戏AI设计的两个禁忌及解决方法

    此文转自游戏帮,勉励下自己 作者:Jon Shafer 我在过去年几负责了多款游戏的AI设计工作,我从中收获的一个最基本,可能也是最令人沮丧的经验就是:创建一个出色的AI真是出奇地困难.不但制作一个符 ...

  8. java2048ai,2048小游戏ai设计

    感谢我的朋友许博瑀,他一定要赞助我个域名,于是网站改为以下地址: >>>>>>>>>>>>>>>>> ...

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

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

最新文章

  1. Oracle调优综述
  2. Windows Server 2012 从入门到精通系列之如何提高DC持续性?
  3. mysql提示太多连接_mysql数据库提示连接太多怎么办
  4. python实践心得体会_“Python自然语言实践”——总结(一),实战
  5. elasticsearch pinyin 拼音分词器
  6. jqAutoComplete 和 knockout
  7. java笔试题(题目+解析)
  8. 矩阵键盘mega16 c语言程序,51单片机对矩阵键盘实现16个按键操作的电路设计
  9. wordpress函数手册_WordPress中文手册文档
  10. 电阻单位符号Ω怎么读?
  11. “多模态视频人物识别”课程分享学习总结
  12. 深挖Openstack Nova - evacuate疏散函数
  13. Python 爬取微信公众号文章
  14. 阿里技术专家的编程方法论:如何写出一手漂亮的代码?
  15. selenium 批量下载qq邮箱附件
  16. 锐龙r7 5800x怎么样 相当于什么水平
  17. aliPay支付宝APP支付操作流程
  18. bu薪水 华为cloud_【华为】CLOUDBU 华为云数据库工程师招聘 - 软件与微电子学院(SSM)版 - 北大未名BBS...
  19. 研究下php加密混淆,解析php混淆加密解密的手段,如 phpjm,phpdp神盾
  20. “一阶数字低通滤波器”原理推导(含仿真和代码实现)

热门文章

  1. http://www.cnblogs.com/alcc/p/Allc.html
  2. 这才是B站的正确打开方式!
  3. 嵌入式开发入门之经典 ARM开发板
  4. 常用的库代码段pytorch_based【tips】
  5. 华师计算机学院2014级,华师,新生早知道
  6. idea 实时更新网页内容(修改代码同时刷新网页即可同步内同)
  7. Ora-24067: exceeded maximum number of subscribers for queue
  8. html css设置文本溢出隐藏
  9. 【论文查询】如何查询论文被其他哪些文献引用过?超详细!!!
  10. 本地连接ipv4无网络访问权限解决办法