Unity之机器人AI

接着上篇简单机器人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
 27 public class Robot : MonoBehaviour
 28 {
 29     //怪物
 30     public RobotAIType robotAIType = RobotAIType.Gremlins;
 31     //主角
 32     public GameObject player;
 33     //状态
 34     private Robot_Do_type robotState;
 35     private float robotStopThinkTime;
 36     public float robotThinkingTime = 5f;
 37
 38     Robot_Do_type currentState;
 39
 40     public void Start()
 41     {
 42         robotState = Robot_Do_type.Robot_idle;
 43         StartCoroutine(RobotAI());
 44     }
 45
 46     IEnumerator RobotAI()
 47     {
 48         while (enabled)
 49         {
 50             switch (robotAIType)
 51             {
 52                 case RobotAIType.Boss:
 53                     BossExecute();
 54                     break;
 55                 case RobotAIType.Gremlins:
 56                     GremlinsExecute();
 57                     break;
 58                 case RobotAIType.Monster:
 59                     MonsterExecute();
 60                     break;
 61             }
 62             yield return null;
 63         }
 64         yield return null;
 65     }
 66
 67     private void GremlinsExecute()
 68     {
 69         //判断精灵与主角的距离
 70         if (Vector3.Distance(player.transform.position, transform.position) <= 10f)
 71         {
 72             transform.LookAt(player.transform);
 73         }
 74     }
 75
 76     private void MonsterExecute()
 77     {
 78         if (IsThinking())
 79         {
 80             AIThinking();
 81         }
 82         else
 83         {
 84             UpdateState();
 85         }
 86     }
 87
 88     public void BossExecute()
 89     {
 90
 91     }
 92
 93     bool IsThinking()
 94     {
 95         if (Time.time - robotStopThinkTime >= 3f)
 96         {
 97             robotStopThinkTime = Time.time;
 98             return true;
 99         }
100         return false;
101     }
102
103     void AIThinking()
104     {
105         int r = Random.Range(0, 4);
106         switch (r)
107         {
108             case (int)Robot_Do_type.Robot_idle:
109                 SetRobotState(Robot_Do_type.Robot_idle);
110                 break;
111             case (int)Robot_Do_type.Robot_pause:
112                 SetRobotState(Robot_Do_type.Robot_pause);
113                 break;
114             case (int)Robot_Do_type.Robot_run:
115                 SetRobotState(Robot_Do_type.Robot_run);
116                 break;
117             case (int)Robot_Do_type.Robot_walk:
118                 SetRobotState(Robot_Do_type.Robot_walk);
119                 break;
120         }
121     }
122
123     void SetRobotState(Robot_Do_type type)
124     {
125         if (currentState == type)
126             return;
127         currentState = type;
128         switch (type)
129         {
130             case Robot_Do_type.Robot_attackPlayer:
131                 transform.LookAt(player.transform);
132                 Debug.Log("attackPlayer attackPlayer");
133                 break;
134             case Robot_Do_type.Robot_chasePlayer:
135                 transform.LookAt(player.transform);
136                 Debug.Log("chasePlayer chasePlayer");
137                 break;
138             case Robot_Do_type.Robot_idle:
139                 Debug.Log("idle idle idle idle");
140                 break;
141             case Robot_Do_type.Robot_pause:
142                 Debug.Log("pause pause pause pause");
143                 break;
144             case Robot_Do_type.Robot_run:
145                 Debug.Log("run run run run");
146                 break;
147             case Robot_Do_type.Robot_walk:
148                 Debug.Log("walk walk walk walk");
149                 break;
150         }
151         //如果是播放动画,判断动画是否正在播放,若没播放则播放
152     }
153
154
155     private void UpdateState()
156     {
157        //判断与主角的距离
158         float distance = Vector3.Distance(player.transform.position, transform.position);
159         if(distance>=10f)
160         {
161             SetRobotState(Robot_Do_type.Robot_idle);
162         }
163         else
164         {
165             if(distance<3f)
166             {
167                 SetRobotState(Robot_Do_type.Robot_attackPlayer);
168             }
169             else
170             {
171                 SetRobotState(Robot_Do_type.Robot_chasePlayer);
172             }
173         }
174     }
175 }

下面是我测试的小图图:

一张0.4M的图为什么上传不上去咧!!!不高兴,不传了

---------------------------------------------------------------------

我的小啊小啊小笔记

时间: 2024-10-14 21:15:03

Unity之机器人AI的相关文章

Unity之简单的机器人AI状态改变

最近在玩天涯明月刀,还蛮好玩,以前都不爱玩游戏,当然啦我现在升到38级了搁着也没玩了,不过曲无忆看外形真没有御姐的范倒像个萌妹子,可是慕情偏是个御姐的外形萌妹子的心啊啊啊 这两天看到知乎有有关于面试的问题,然后看到有关智能AI的,就想到天涯明月刀里做任务时的打怪,怪老是一会走啊走一会干嘛干嘛的,做虚拟的我还真没接触过咧 那就来看看呗,反正不掉肉不长肉的 这个是只是状态的改变,如果检测到周围有敌人或者啥的然后打啊打杀啊杀啊后面再加吧! 1 using UnityEngine; 2 using Sy

Unity战斗系统之AI自主决策

http://www.taikr.com/course/448/tasks http://www.xuanyusong.com/archives/1840 http://www.cnblogs.com/qiaogaojian/p/5920998.html http://blog.csdn.net/u014725878/article/details/51481259 http://blog.csdn.net/zzmkljd/article/details/53409173 http://www.

棋牌源码搭建教程之棋牌游戏AI算法

棋牌游戏客户端实现采用Flash 9开发,服务端采用Win32+VC6开发(基于IOCP),数据库网关采用Win32+VC6开发(基于IOCP,MySQL5实现了处理线程池和数据库连接池).虽然服务器端去年就已经完成,但相应的机器人AI算法一直没有能力去实现.今天把它拿到Blog上来希望有机会和感兴趣的兄弟们探讨下. Kevin在他的Blog上给出了他的实现,其给出的算法思想是用宽度优先生成一棵搜索树,再根据玩牌的技巧进行剪枝与判权,机器人的AI能够像养成类游戏那样,实现在蹂躏下慢慢成长,水平逐

人工智能机器人“能文能武”,但还差一些感性与思考

[博客园]近年,人工智能技术愈发火热,机器人正在实现越来越多的功能.据<华尔街日报>消息,NII (日本国立情报学研究所)最新研发的人工智能(AI)技术已经可以在日本高考中考取511分的成绩.日本大学入学考试总分为950分,而日本全国高考平均水平为416分,这就意味着这款“考试机器人”有80%的几率被日本441家私立大学及33所全国性大学录取.无独有偶,在即将于北京召开的2015世界机器人大会上,将会举办机器人足球明星表演赛,届时,RoboCup机器人足球世界杯的国际.国内冠军联队都将登场,展

万众瞩目下,AI能与游戏擦出怎样的火花?

2005年,林俊杰在<编号89757>里唱道"模仿人类的机器,真实的皮肤有温度,甚至能呼吸". 2017年,李克勤在<C3PO>里唱道"但我是钢铁外壳你介意吗,我没时尚造型但落力护花". 两首歌,相隔十二年,同样以机器人为主角,作词人将机器人AI化.情感化到极致.不同的是,现实生活中AI的研究早已不局限在机器人这一单一命题上,而是向多个方向延伸,呈全面开花之势,游戏就是其中一个. 从1997年深蓝击败当时等级分排名世界第一的棋手加里·卡斯帕罗

怎么规划一个零基础学习Unity3D的“方法”或者“流程”?

具体出处:https://www.zhihu.com/question/35542990 我只是一个计算机相关专业毕业的,已经掌握了基础的C#并开发过.net的.目前突然心血来潮对unity3D有兴趣,就学习下. 推荐学习视频网页:http://www.taikr.com/ 虽然要钱不过有免费的. http://study.163.com/course/introduction.htm?courseId=1002818014  游戏特效 - Unity3d特效基础 - 入门到精通(免费)  ht

BehaviorDesigner学习

行为树: 行为树设计师插件是一个专门为unity设计的AI插件. 学习用!!!插件地址:链接:http://pan.baidu.com/s/1dF2okPN 密码:b43m 通过继承Behavior中的Task下的四个节点,可以创建自己的行为树节点. 行为树中的自定义类型均为sharedType:SharedInt,Sharedfloat… 可使用BehaviorTreen.Getvariable,BehaviorTreen.Setvariable,BehaviorTreen.Setvariab

H5版俄罗斯方块(1)---需求分析和目标创新

前言: 俄罗斯方块和五子棋一样, 规则简单, 上手容易. 几乎每个开发者, 都会在其青春年华时, 签下"xx到此一游". 犹记得大一老师在布置大程作业的时候提过: "什么都可以写, 唯一不能写的是俄罗斯方块". 这次想借学Html5的机会, 重温下俄罗斯方块. 当然不是单一的实现, 希望有所创新, 在可玩性/趣味性上有所突破. 调研: 在4399这个游戏平台上, 选择了几款俄罗斯方块相关的游戏进行试玩. 大致总结了下各类俄罗斯方块的新意. • 引入场景 码头俄罗斯方

大型网络游戏服务器的框架设计(一)

服务器是用来处理高并发的请求,同时能够满足扩展的业务逻辑的需求,最重要的是满足三点:并发性,稳定性,扩展性. 经历过两款上线游戏产品,见识到了游戏行业的杂乱无章,虽然和传统软件行业相比,少了那么些规范,但是对个人能力要求还真不比传统软件行业低. 今天开始,陆续利用业余时间将自己设计的一个服务器的框架贴出来,也会包好一些基本的代码,也会用到一些开源库.从最基础的讲起,首先看看一个实时网络游戏服务器的框架: 目前市面上的游戏,总的来说分为两类: 1.弱联网类游戏,像手机上的卡牌类游戏(MT,Dota