10-游戏智能

Homework10

项目地址
使用说明:打开场景Scenes/TankAI.unity点击运行即可
视频展示

坦克对战游戏 AI 设计
  • 使用“感知-思考-行为”模型,建模 AI 坦克
  • 场景中要放置一些障碍阻挡对手视线
  • 坦克需要放置一个矩阵包围盒触发器,以保证 AI 坦克能使用射线探测对手方位
  • AI 坦克必须在有目标条件下使用导航,并能绕过障碍。(失去目标时策略自己思考)
  • 实现人机对战
实现过程

本游戏实现引用了Kawaii Tank资源包,下载好后将其全部导入到项目中

  1. 导入Kawaii Tank包中已经构建好的场景的Test_Field

  2. 添加两个Kawaii_Tanks_Project/Kawaii_Tanks_Assets/Prefabs中的SD_Firefly_1.1作为敌人(即AI坦克),将四个坦克修改名字

  3. 添加四个新的房子Props作为障碍物遮挡AI坦克的视野

    前三步完成后场景结构如下
    在这里插入图片描述

  4. Window-AI-Navigation中引入Navigation导航栏,将地形Terrain设置为Walkable
    在这里插入图片描述

  5. 给所有的敌方坦克(即AI坦克)的MainBody添加Nav Mesh Agent组件

  6. 然后在Navigation窗口选中Bake栏目,点击右下角的Bake,生成导航网格图如下
    在这里插入图片描述

  7. 给所有的敌方坦克(即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);
        }
    }
    

    在这里插入图片描述

  8. 为了增加游戏的可玩性,修改原场景代码

    • 修改Fire_Control_CS.cs中的Update函数,将AI坦克发射子弹间隔修改为3s

      void 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;
              }
          }
      }
      ``
      
      
参考博客

往届师兄博客

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值