2、 坦克对战游戏 AI 设计 从商店下载游戏:“Kawaii” Tank 或 其他坦克模型,构建 AI 对战坦克。具体要求
- 使用“感知-思考-行为”模型,建模 AI 坦克
- 场景中要放置一些障碍阻挡对手视线
- 坦克需要放置一个矩阵包围盒触发器,以保证 AI 坦克能使用射线探测对手方位
- AI 坦克必须在有目标条件下使用导航,并能绕过障碍。(失去目标时策略自己思考)
实现人机对战
AI坦克获取玩家坦克信息通过Vision获取,因为障碍物阻碍,AI坦克不会实时感知到玩家坦克
思考
当AI坦克发现玩家时,会自动瞄准玩家,并使用Navigation进行寻路从而靠近玩家。当没有发现玩家时,按照预先定义的方向速度进行移动
行动
就包括没有看见玩家坦克时按照预设的方向行动和发射子弹的行动;
以及发现玩家坦克时朝着玩家坦克前进和瞄准玩家坦克发射子弹的行动。
(为了减少游戏难度,我将玩家坦克发射子弹的速度调大了,AI坦克发射子弹的速度调小了)。
具体实现 地图制作:
首先使用资源包中的预制,进行地图的制作。我删除了一些不必要的地形,选取了一些房子并将其随意摆放在地图上。
文章图片
并选取整个地形,添加nav mash agent组件。
进入window->AI->Navigate->选择Object->过滤器选择Mesh Renderers
文章图片
选择想要无法被导航的对象,把navigation static打上勾,如上图所示,最后选择bake选项,在选择下面的bake生成导航
文章图片
最后效果如上下图
文章图片
AI坦克追踪
在mainbody挂载上脚本PlaceTarget用于追踪发现的玩家坦克:
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.AI;
public class PlaceTarget : MonoBehaviour
{
public GameObject target;
NavMeshAgent mr;
void Start()
{
mr = GetComponent();
}void Update()
{
mr.SetDestination(target.transform.position);
}
}
AI坦克瞄准并发射子弹
原来控制坦克发射子弹的脚本是Fire_Control_CS,为了限制AI坦克的发射速度进行修改,修改后如下:
void Update ()
{
if (idScript.isPlayer) {
#if UNITY_ANDROID || UNITY_IPHONE
Mobile_Input ();
#else
Desktop_Input ();
#endif
} else
{
count = count + Time.deltaTime;
if(count > 3.0f)//这里修改发射时间
{
Fire();
count = 0;
}
}
}
一点小修改:血量情况常驻
为了保证玩家能够实时观察到自己控制的坦克血量情况,将血量显示进行常驻而非原来的受击后才显示
void Update ()
{
if(idScript.isPlayer)
{
displayScript.Get_Damage(durability, initialDurability);
}
if (idScript.isPlayer) {
#if UNITY_ANDROID || UNITY_IPHONE
if (CrossPlatformInputManager.GetButtonDown ("Destruct")) {
#else
if (Input.GetKeyDown (KeyCode.Return)) {
#endif
Start_Destroying ();
}
}
}
运行视频 项目资源 【AI坦克-unity3D】运行方法:直接点击TankAI.unity进入运行即可
推荐阅读
- Unity|Unity 3D游戏十一(坦克大战)
- 笔记|Unity角色控制器CharacterController移动代码
- 毕设|【截图整理官方教程】unity 2D角色控制器 2D Character Controller
- Unity|Unity CharacterController控制人物移动(包括重力实现)
- Unity|Unity中RampTex介绍和应用: 溶解特效优化
- Unity|Unity中SmoothStep介绍和应用: 溶解特效优化
- 3D|Unity3D入门笔记01
- Unity3d|Unity Gameplay工具集(Unity Gameplay Tool Set)
- unity|Unity3D GUI控件