欢迎来到天天文库
浏览记录
ID:39891061
大小:559.50 KB
页数:13页
时间:2019-07-14
《unity3D游戏开发之人工智能AI》由会员上传分享,免费在线阅读,更多相关内容在工程资料-天天文库。
1、很久没有写Unity3D相关的东西了,是因为这段时间我深陷一款IOS的软件开发中。不过以后我还是会回归Unity3D游戏开发的。什么语言都在用,生活与工作都挺给力的嚯嚯。今天还是打开了久违的Unity3D编辑器,那我就写点东西吧,今天我想说的是游戏中的人工智能。人工智能这个东西在游戏中是非常重要的,人工智能说简单了就是根据随机的数字让敌人执行一些动作或逻辑,说难了TA需要一个非常复杂的算法,本文我主要说说Unity3D中人工智能的脚本如何来编写。 首先你应该搞清楚的一点AI脚本属于一个工具类脚本,工具类脚本的含义就是他应当是由策划人员来绑定游戏对象使用的。也就是说AI脚本程序员应当写的非常的灵
2、活,策划人员可以通过修改脚本对外的变量数值接口就能控制其中的敌人AI。接着创建一个c#脚本AI.CS,如下图所示,目前脚本对外留出枚举接口变量,策划人员在使用这条脚本时选择对应敌人类型即可。(注:这里仅仅是示例,细致的话还可以将很多敌人详细的信息写入,如:攻击速度、技能类型、移动速度、命中率、攻击百分比、等等,但是一定要让你的脚本写的比较灵活,策划人员在外面选择即可完成)因为目前是一个示例,所以我在这里只简单的区分的敌人类型。文章来自【狗刨学习网】 下面时这段简单AI的脚本AI.CSC#12345678910111213usingUnityEngine;usingSystem.Collect
3、ions; //这里是枚举选择敌人类型publicenumEnemyType{Enemy0,Enemy1} publicclassAI:MonoBehaviour{ //敌人类型枚举有策划人员选择14151617181920212223242526272829303132333435publicEnemyTypeenemyType=EnemyType.Enemy0; //主角游戏对象publicGameObjectplayer; //敌人状态普通状态旋转状态奔跑状态追击主角状态攻击主角状态privateconstintEMEMY_NORMAL=0;privateconstintEMEMY_RO
4、TATION=1;privateconstintEMEMY_RUN=2;privateconstintEMEMY_CHASE=3;privateconstintEMEMY_ATTACK=4; //记录当前敌人状态根据不同类型敌人播放不同动画privateintstate;//旋转状态,敌人自身旋转privateintrotation_state;//记录敌人上一次思考时间privatefloataiThankLastTime; voidStart(){36373839404142434445464748495051525354555657//初始话标志敌人状态以及动画为循环播放state=EM
5、EMY_NORMAL;this.animation.wrapMode=WrapMode.Loop;} voidUpdate(){//根据策划选择的敌人类型这里面会进行不同的敌人AIswitch(enemyType){caseEnemyType.Enemy0:updateEnemyType0();break;caseEnemyType.Enemy1:updateEnemyType1();break;}} //更新第一种敌人的AIvoidupdateEnemyType0(){58596061626364656667686970717273747576777879//这个AI比较简单,当主角与他的距
6、离小于10米时,他将始终朝向这主角if(Vector3.Distance(player.transform.position,this.transform.position)<=10){this.transform.LookAt(player.transform);}} //更新第二种敌人的AIvoidupdateEnemyType1(){ //判断敌人是否开始思考if(isAIthank()){//敌人开始思考AIthankEnemyState(3);}else{//更新敌人状态UpdateEmenyState();80818283848586878889909192939495969798
7、99100}} intgetRandom(intcount){ returnnewSystem.Random().Next(count); } boolisAIthank(){//这里表示敌人每3秒进行一次思考if(Time.time-aiThankLastTime>=3.0f){aiThankLastTime=Time.time;returntrue; }returnfalse;} 101102
此文档下载收益归作者所有