[FreedomAI]第三周——InfluenceMap

势力图或影响图被认为是AI进行决策时获取外界信息的一种良好方法。这些外界的信息可能包括,友方信息,敌方信息,地形及道具信息,这些东西我们如果让每个AI都用GameObject.Find....Withtag 那么可想而知,其复杂度就是N个AI*M个信息提供者。

但我们如果换个思路,在每一帧内这些物品信息都是固定(甚至有一些游戏开始时就固定了),我们为什么不设置一张图预处理这些信息呢?就像我们在图形学中经常做的烘焙一样?

所以影响图就是这样的一个算法。

首先我们会将这个地图Grid化,先不妨认为这是2D或2.5D的情况。然后每一个信息源都会计算一个值(把自己量化),然后有一个辐射半径,对周围的格子进行进行影响,格子上的值是不断叠加的。

当然这些信息并不能使得AI就立刻发生什么,准确的说,我们收集了这些信息,再进一步用于寻路和决策的逻辑才有意义。

先上代码:

public Vector2 center;
		public float width;
		public float height;
		public int wtileCount;
		public int htileCount;
		public float[][][] IMData;
		public int allCount = 0;
		public Dictionary<string,int> mDictionary = new Dictionary<string, int>();
		private static InfluenceMap mInfluenceMapsingleton;
		public Dictionary<int,bool> mDicStatic = new Dictionary<int, bool>();
		public bool Debugging;
		private Vector2[] NineGrid = new Vector2[]{new Vector2(0,1),new Vector2(0,-1),
			new Vector2(1,1),new Vector2(1,0),new Vector2(1,-1),
			new Vector2(-1,1),new Vector2(-1,0),new Vector2(-1,-1)};

		public Vector2 deltaTileSize
		{
			get
			{
				return new Vector2 (width/wtileCount,height/htileCount);
			}
		}

		public static InfluenceMap getInstance()
		{
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值