Homework10
坦克对战游戏 AI 设计
- 使用“感知-思考-行为”模型,建模 AI 坦克
- 场景中要放置一些障碍阻挡对手视线
- 坦克需要放置一个矩阵包围盒触发器,以保证 AI 坦克能使用射线探测对手方位
- AI 坦克必须在有目标条件下使用导航,并能绕过障碍。(失去目标时策略自己思考)
- 实现人机对战
实现过程
本游戏实现引用了
Kawaii Tank
的资源包,下载好后将其全部导入到项目中
-
导入
Kawaii Tank
包中已经构建好的场景的Test_Field
-
添加两个
Kawaii_Tanks_Project/Kawaii_Tanks_Assets/Prefabs
中的SD_Firefly_1.1
作为敌人(即AI坦克),将四个坦克修改名字 -
添加四个新的房子
Props
作为障碍物遮挡AI坦克的视野前三步完成后场景结构如下
-
在
Window-AI-Navigation
中引入Navigation导航栏,将地形Terrain
设置为Walkable
-
给所有的敌方坦克(即AI坦克)的
MainBody
添加Nav Mesh Agent
组件 -
然后在
Navigation
窗口选中Bake
栏目,点击右下角的Bake
,生成导航网格图如下
-
给所有的敌方坦克(即AI坦克)的
MainBody
添加如下PlaceTarget
脚本,并将Palyer
(即我方坦克)的MainBody
设置为对应Target
using System.Collections; using System.Collections.Generic; using UnityEngine; using UnityEngine.AI; public class PlaceTarget : MonoBehaviour { public GameObject target; // 设置目标 NavMeshAgent mr; void Start() { //获取到自身的NavMeshAgent组件 mr = GetComponent<NavMeshAgent>(); } void Update() { //使用方法获取目标点坐标,,和前一行代码作用相同 mr.SetDestination(target.transform.position); } }
-
为了增加游戏的可玩性,修改原场景代码
-
修改
Fire_Control_CS.cs
中的Update
函数,将AI坦克发射子弹间隔修改为3svoid 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) { Fire(); count = 0; } } } ``
-