Unity实战 RTS3D即时战略游戏开发(十一) 建造AI、生产AI
来源:互联网 发布:勇者之塔祈祷数据 编辑:程序博客网 时间:2024/06/05 04:34
大家好,我是Zander,我们接着来开发Rts3D即时战略游戏开发。这节课我们接着来讲AI的相关部分(建造AI、生产AI)。Ai 要知道如何建造建筑,在拥有足够的钱和无人机就可以创建。例如没有建筑时就应该建造一个,首先进入Scripts中的AI文件夹创建一个CreateBaseAI的脚本,
using UnityEngine;using System.Collections;public class CreateBaseAi : AiBehavior {private AiSupport support = null; //获取支持类public float Cost = 200; //建造花费public int UnitsPerBase = 5; //表示一个建筑可以生产多少个单位public float RangeFromDrone = 30; //离单位多远才能创建建筑public int TriesPerDrone = 3; //一个单位要尝试创建多少次才能轮到下个单位public GameObject BasePrefab; //建筑物预设public override float GetWeight () //获得建造权重{if (support == null)support = AiSupport.GetSupport (gameObject);if (support.Player.Credits < Cost || support.Drones.Count == 0) //判断有足够的钱和无人机return 0;if (support.CommandBases.Count == 0) //如果没有建筑,则优先建造建筑return 1; if (support.CommandBases.Count * UnitsPerBase <= support.Drones.Count) return 1; return 0;}public override void Execute () //{Debug.Log ("Creating Base");var go = GameObject.Instantiate (BasePrefab);go.AddComponent<Player> ().Info = support.Player;foreach (var drone in support.Drones) {for (int i = 0; i < TriesPerDrone; i++) {var pos = drone.transform.position;pos += Random.insideUnitSphere * RangeFromDrone;pos.y = Terrain.activeTerrain.SampleHeight (pos); //确保在地表之上go.transform.position = pos;if (RtsManager.Current.IsGameObjectSafeToPlace (go)) //判断是否在可建造的位置 {support.Player.Credits -= Cost;return;}}}
Destroy (go);
}}
返回到Unity,把脚本挂载Player 2 Ai 物体上,如图:
接下来我们需要更多的无人机来测试建造AI是否能持续创建建筑,所以我们需要一个生产无人机的AI,在AI文件夹下创建一个CreateDroneAi脚本,编辑如下:
using UnityEngine;using System.Collections;public class CreateDronesAi : AiBehavior {public int DronesPerBase = 5; //一个建筑可以供养几个无人机public float Cost = 25; //建筑无人机花费private AiSupport support; // /// <summary> /// 得到生产无人机权重 /// </summary> /// <returns></returns>public override float GetWeight () {if (support == null)support = AiSupport.GetSupport (gameObject);if (support.Player.Credits < Cost)return 0;var drones = support.Drones.Count;var bases = support.CommandBases.Count;if (bases == 0) //判断是否有生产无人机的建筑return 0;if (drones >= bases * DronesPerBase) return 0; //判断无人机总量是否大于建筑可供给的数量return 1;}public override void Execute (){Debug.Log (support.Player.Name + " is creating a drone.");var bases = support.CommandBases;var index = Random.Range (0, bases.Count);var commandBase = bases [index];commandBase.GetComponent<CreateUnitAction> ().GetClickAction () ();}}
这样我们就完成了自动建造建筑AI和自动生产无人机的AI了。
好了,这一章就写到这,欢迎大家加入QQ群:280993838 或者关注我的公众号:
1 0
- Unity实战 RTS3D即时战略游戏开发(十一) 建造AI、生产AI
- Unity实战 RTS3D即时战略游戏开发(十一) 单位生产
- Unity实战 RTS3D即时战略游戏开发(十二) 战斗AI的控制
- Unity实战 RTS3D即时战略游戏开发(十) 可建造地点标示
- Unity实战 RTS3D即时战略游戏开发(一)
- Unity实战 RTS3D即时战略游戏开发(二)
- Unity实战 RTS3D即时战略游戏开发(三)
- Unity实战 RTS3D即时战略游戏开发(四)
- Unity实战 RTS3D即时战略游戏开发(五) 鼠标管理器
- Unity实战 RTS3D即时战略游戏开发(七) 信息显示
- Unity实战 RTS3D即时战略游戏开发(十) AiController
- Unity实战 RTS3D即时战略游戏开发(六) Navigation Mesh 自动寻路
- Unity实战 RTS3D即时战略游戏开发(八) HUD的使用 小地图显示
- Unity实战 RTS3D即时战略游戏开发(八) HUD的使用 单位信息显示
- Unity实战 RTS3D即时战略游戏开发(九) 行为管理器 Action的使用
- Unity实战 RTS3D即时战略游戏开发(十三) 伤害更新信息显示、销毁单位、爆炸效果
- Unity游戏开发 怪物巡逻AI
- 即时战略游戏将领指挥AI方案设想(转帖)
- 欢迎使用CSDN-markdown编辑器
- DOM(Document Object Model)
- Android最新源码汇总
- 《明解C语言》示例代码和练习代码[第7章]
- 将ip改成域名方式登陆
- Unity实战 RTS3D即时战略游戏开发(十一) 建造AI、生产AI
- gps纠偏算法,适用于google,高德体系的地图
- Android UDP
- rabbitmq 常用命令
- 部署web项目时,在服务器上执行MYSQL语句,导入不成功 [Msg] Finished - Unsuccessfully
- 内部类详解(很详细)
- jsp中 #{...} is not allowed in template text的一种详解
- 五、程序猿遇上精神运动发育迟缓儿子
- gulp的使用介绍和项目应用到的插件介绍