unity实现AI对战坦克

unity实现AI对战坦克

游戏要求

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

具体实现

参考师兄的博客https://blog.csdn.net/Jenny_Shirunhao/article/details/103337423,Bake生成导航网格图之前的步骤就不赘述了,烘焙效果如下:
在这里插入图片描述
为AI坦克添加脚本使其能够跟踪玩家的坦克

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.AI;

public class TrackTarget : MonoBehaviour
{
    public GameObject target;
    NavMeshAgent nav;
    void Start()
    {
        nav = GetComponent<NavMeshAgent>();
    }

    void OnTriggerEnter(Collider collider)
    {
        if (collider.gameObject.tag == "Player")
        {
            nav.SetDestination(target.transform.position);
        }
    }
}

AI通过碰撞体的tag来判断是否是玩家,为使上面代码正常运行,需要给AI坦克增加碰撞体,以及将玩家坦克的标签设为Player。

在这里插入图片描述

AI坦克还不够多,再在地图上放几个。

使AI坦克发射炮弹

修改Fire_Control_CS的代码如下:

float count = 4.0f;
void Update ()
		{
			if (idScript.isPlayer) {
				#if UNITY_ANDROID || UNITY_IPHONE
				Mobile_Input ();
				#else
				Desktop_Input ();
				#endif
			}
			else
            {
                count -= Time.deltaTime;
                if(count <= 0)
                {
                    Fire();
                    count = 4.0f;
                }
            }
		}

坦克还不够多,再在地图上放几个。
在这里插入图片描述

腹背受敌,要的就是这种感觉。

坦克默认,受到攻击时显示血条,为了时刻能显示玩家的血条,修改Damage_Control_CS代码如下:

	if(idScript.isPlayer)
    {
        displayScript.Get_Damage(durability, initialDurability);
    }
	// Destruct
	if (idScript.isPlayer) {
	#if UNITY_ANDROID || UNITY_IPHONE
	if (CrossPlatformInputManager.GetButtonDown ("Destruct")) {
	#else
	if (Input.GetKeyDown (KeyCode.Return)) {
	#endif
	Start_Destroying ();
	}
	}

保存运行,看到血条如下:
在这里插入图片描述

游戏效果

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

仓库地址

github链接

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值