首页 / UNITY / Unity之机器人AI
Unity之机器人AI
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了Unity之机器人AI,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含3555字,纯文字阅读大概需要6分钟。
内容图文
![Unity之机器人AI](/upload/InfoBanner/zyjiaocheng/1327/029b754d1cd04bd0891f604677712989.jpg)
接着上篇简单机器人AI的那个,下午搜了下相关的看到“Unity3D研究院之游戏开发中的人工智能AI(三十八)”,便仔细尝试按照他的思路着写了并测试了,效果杠杠的
我就贴自已写的一遍的代码了,作为一个小小小笔记吧!!!
1 using UnityEngine; 2 using System.Collections; 3 4 /// <summary> 5 /// 类型 6 /// </summary> 7 public enum RobotAIType 8 { 9 Gremlins, 10 Monster, 11 Boss, 12 } 13 14 /// <summary> 15 /// 状态 16 /// </summary> 17 public enum Robot_Do_type 18 { 19 Robot_idle=0, 20 Robot_run=1, 21 Robot_pause=2, 22 Robot_walk=3, 23 Robot_chasePlayer=4, 24 Robot_attackPlayer=5 25} 26 27publicclass Robot : MonoBehaviour 28{ 29//怪物 30public RobotAIType robotAIType = RobotAIType.Gremlins; 31//主角 32public GameObject player; 33//状态 34private Robot_Do_type robotState; 35privatefloat robotStopThinkTime; 36publicfloat robotThinkingTime = 5f; 37 38 Robot_Do_type currentState; 39 40publicvoid Start() 41 { 42 robotState = Robot_Do_type.Robot_idle; 43 StartCoroutine(RobotAI()); 44 } 45 46 IEnumerator RobotAI() 47 { 48while (enabled) 49 { 50switch (robotAIType) 51 { 52case RobotAIType.Boss: 53 BossExecute(); 54break; 55case RobotAIType.Gremlins: 56 GremlinsExecute(); 57break; 58case RobotAIType.Monster: 59 MonsterExecute(); 60break; 61 } 62yieldreturnnull; 63 } 64yieldreturnnull; 65 } 66 67privatevoid GremlinsExecute() 68 { 69//判断精灵与主角的距离 70if (Vector3.Distance(player.transform.position, transform.position) <= 10f) 71 { 72 transform.LookAt(player.transform); 73 } 74 } 75 76privatevoid MonsterExecute() 77 { 78if (IsThinking()) 79 { 80 AIThinking(); 81 } 82else 83 { 84 UpdateState(); 85 } 86 } 87 88publicvoid BossExecute() 89 { 90 91 } 92 93bool IsThinking() 94 { 95if (Time.time - robotStopThinkTime >= 3f) 96 { 97 robotStopThinkTime = Time.time; 98returntrue; 99 } 100returnfalse; 101 } 102103void AIThinking() 104 { 105int r = Random.Range(0, 4); 106switch (r) 107 { 108case (int)Robot_Do_type.Robot_idle: 109 SetRobotState(Robot_Do_type.Robot_idle); 110break; 111case (int)Robot_Do_type.Robot_pause: 112 SetRobotState(Robot_Do_type.Robot_pause); 113break; 114case (int)Robot_Do_type.Robot_run: 115 SetRobotState(Robot_Do_type.Robot_run); 116break; 117case (int)Robot_Do_type.Robot_walk: 118 SetRobotState(Robot_Do_type.Robot_walk); 119break; 120 } 121 } 122123void SetRobotState(Robot_Do_type type) 124 { 125if (currentState == type) 126return; 127 currentState = type; 128switch (type) 129 { 130case Robot_Do_type.Robot_attackPlayer: 131 transform.LookAt(player.transform); 132 Debug.Log("attackPlayer attackPlayer"); 133break; 134case Robot_Do_type.Robot_chasePlayer: 135 transform.LookAt(player.transform); 136 Debug.Log("chasePlayer chasePlayer"); 137break; 138case Robot_Do_type.Robot_idle: 139 Debug.Log("idle idle idle idle"); 140break; 141case Robot_Do_type.Robot_pause: 142 Debug.Log("pause pause pause pause"); 143break; 144case Robot_Do_type.Robot_run: 145 Debug.Log("run run run run"); 146break; 147case Robot_Do_type.Robot_walk: 148 Debug.Log("walk walk walk walk"); 149break; 150 } 151//如果是播放动画,判断动画是否正在播放,若没播放则播放152 } 153154155privatevoid UpdateState() 156 { 157//判断与主角的距离158float distance = Vector3.Distance(player.transform.position, transform.position); 159if(distance>=10f) 160 { 161 SetRobotState(Robot_Do_type.Robot_idle); 162 } 163else164 { 165if(distance<3f) 166 { 167 SetRobotState(Robot_Do_type.Robot_attackPlayer); 168 } 169else170 { 171 SetRobotState(Robot_Do_type.Robot_chasePlayer); 172 } 173 } 174 } 175 }
下面是我测试的小图图:
一张0.4M的图为什么上传不上去咧!!!不高兴,不传了
---------------------------------------------------------------------
我的小啊小啊小笔记
原文:http://www.cnblogs.com/cathytong/p/4673999.html
内容总结
以上是互联网集市为您收集整理的Unity之机器人AI全部内容,希望文章能够帮你解决Unity之机器人AI所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。