本系列文章由Aimar_Johnny编写,欢迎转载,转载请标明出处,谢谢。

http://blog.csdn.net/lzhq1982/article/details/12620603

前面的文章我为我的世界增加了夏娃,但是夏娃好孤独,扛着把大剑连个怪都找不到,于是怪物诞生了。

接着找资源吧,最终在Asset Store里找到了它,免费的,所以丑了点。

不过虽然丑,还是用unity4.0以后支持的Mecanim做的呢,Animator见下图:

不熟悉Mecanim的童鞋,建议看看英宝通的公开课,一个非常非常强大的工具,我给个公开课的地址:英宝通公开课地址

在怪物身上加个脚本,专门处理AI。

怪物的行为也是用状态机实现的

[csharp] view plaincopy
  1. switch(enemyState)
  2. {
  3. case STATE_IDLE:
  4. break;
  5. case STATE_WALK:
  6. Vector3 forward = transform.TransformDirection(Vector3.forward);
  7. _controller.SimpleMove(forward * speed);
  8. break;
  9. case STATE_CROUCH:
  10. Vector3 crawlforward = transform.TransformDirection(Vector3.forward);
  11. _controller.SimpleMove(crawlforward * crawlSpeed);
  12. break;
  13. case STATE_ATTACK:
  14. break;
  15. case STATE_DIE:
  16. Destroy(gameObject);
  17. IsNpcPanelShow = false;
  18. break;
  19. }

上面代码很简单,没什么好解释的。不了解SimpleMove,请看我前一篇文章。

重要的在这里,怪物是怎么产生AI的:

[csharp] view plaincopy
  1. if (enemyState != STATE_ATTACK) {
  2. if (Time.time - backUptime >= AI_THINK_TIME) {
  3. backUptime = Time.time;
  4. animator = GetComponent <Animator>();
  5. int rand = Random.Range(0, 3);
  6. if (rand == 0) {
  7. animator.SetBool("gocrouch", false);
  8. animator.SetFloat("speed", 0);
  9. enemyState = STATE_IDLE;
  10. } else if (rand == 1) {
  11. animator.SetBool("gocrouch", false);
  12. Quaternion rotate = Quaternion.Euler(0, Random.Range(1,5)*90, 0);
  13. transform.rotation = Quaternion.Slerp(transform.rotation, rotate, Time.deltaTime*1000);
  14. animator.SetFloat("speed", 0.5f);
  15. enemyState = STATE_WALK;
  16. } else if (rand == 2) {
  17. Quaternion rotate = Quaternion.Euler(0, Random.Range(1,5)*90, 0);
  18. transform.rotation = Quaternion.Slerp(transform.rotation, rotate, Time.deltaTime*1000);
  19. animator.SetBool("gocrouch", true);
  20. animator.SetFloat("speed", 0.5f);
  21. enemyState = STATE_CROUCH;
  22. }
  23. }
  24. }

这里用到了Mecanim的animator的播放动作的方法,就是用上面动画状态机里的参数控制的。AI_THINK_TIME是怪物每次变换AI的时间间隔,我设置为2秒,当每次变换AI时,先随机一个行为,这里注意,Random.Range方法如果里面参数是整形,是[a, b)的关系,包括前者但不包括后者,如果是浮点型,前后者都包括。所以这里只能随机出0,1,2。当是0时,是休息状态,gocrouch(控制爬行)设为false,speed(控制行走速度)设为0,状态置成休息;1是行走,2是爬行,参数设置自己看吧。随机个角度,再平滑转个身,很简单的行为就实现了。

现在把我们的怪种到地图上吧,我是想在地图上种几个点,专门刷怪。选择GameObject->CreateEmpty,命名MonsterCreater1,在Transform那输入地图上一个点,如此多创建几个点,不要重啊,然后创建个刷怪的脚本。

[csharp] view plaincopy
  1. public class MonsterCreater : MonoBehaviour {
  2. public GameObject monster;
  3. // Use this for initialization
  4. void Start () {
  5. Instantiate(monster, transform.position, transform.rotation);
  6. }
  7. }

这个Instantiate是用来实例化的,这样做不会增加内存,说的有点多余,只要了解unity的应该都知道。然后把你的怪赋给monster,再把这个脚本加到每个MonsterCreater上,运行游戏,我们的怪就在每个点都出来了,看他们英姿飒爽的小身影,哈哈。

unity3d学习笔记(五)--结合Mecanim实现怪物AI相关推荐

  1. Unity3D学习笔记(二、小球滚动吃金币)

    源码:键盘方向键操作小球滚动吃金币Unity3D源码 下篇:Unity3D学习笔记(三.小球跑酷) 一.颜色材质球创建  二.Plane平板创建 三.围墙 同理二,新建Cube,并调整属性,设立围墙 ...

  2. python函数是一段具有特定功能的语句组_Python学习笔记(五)函数和代码复用

    本文将为您描述Python学习笔记(五)函数和代码复用,具体完成步骤: 函数能提高应用的模块性,和代码的重复利用率.在很多高级语言中,都可以使用函数实现多种功能.在之前的学习中,相信你已经知道Pyth ...

  3. Ethernet/IP 学习笔记五

    Ethernet/IP 学习笔记五 Accessing data within a device using a non-time critical message (an explicit mess ...

  4. StackExchange.Redis学习笔记(五) 发布和订阅

    StackExchange.Redis学习笔记(五) 发布和订阅 原文:StackExchange.Redis学习笔记(五) 发布和订阅 Redis命令中的Pub/Sub Redis在 2.0之后的版 ...

  5. 吴恩达《机器学习》学习笔记五——逻辑回归

    吴恩达<机器学习>学习笔记五--逻辑回归 一. 分类(classification) 1.定义 2.阈值 二. 逻辑(logistic)回归假设函数 1.假设的表达式 2.假设表达式的意义 ...

  6. 好程序员教程分析Vue学习笔记五

    好程序员教程分析Vue学习笔记五,上次我们学习了Vue的组件,这次我们来学习一下路由的使用.在Vue中,所谓的路由其实跟其他的框架中的路由的概念差不多,即指跳转的路径. 注意:在Vue中,要使用路由, ...

  7. 【AngularJs学习笔记五】AngularJS从构建项目开始

    为什么80%的码农都做不了架构师?>>>    #0 系列目录# AngularJs学习笔记 [AngularJs学习笔记一]Bower解决js的依赖管理 [AngularJs学习笔 ...

  8. ROS学习笔记五:理解ROS topics

    ROS学习笔记五:理解ROS topics 本节主要介绍ROS topics并且使用rostopic和rqt_plot命令行工具. 例子展示 roscore 首先运行roscore系列服务,这是使用R ...

  9. Unity3D 学习笔记3——了解U3D引擎的操作面板和各种工具

    Unity3D 学习笔记3--了解U3D引擎的操作面板和各种工具 在完成了Unity的安装破解之后,我们接下来要做的当前是启动这个引擎,然后学会如何去使用它为我们提供的各种工具,这也是上手任何一个软件 ...

  10. Unity3D 学习笔记4 —— UGUI+uLua游戏框架

    Unity3D 学习笔记4 -- UGUI+uLua游戏框架 使用到的资料下载地址以及基础知识 框架讲解 拓展热更过程 在这里我们使用的是uLua/cstolua技术空间所以提供的UGUI+uLua的 ...

最新文章

  1. MapReduce算法设计(三)----相对频率计算
  2. 朴素贝叶斯 半朴素贝叶斯_SQL Server中的朴素贝叶斯预测
  3. PHP弱类型安全问题总结
  4. Java求一个数的质因数
  5. 【Android Studio安装部署系列】二十二、Android studio自动生成set、get方法
  6. matlab hspice联合仿真,HSPICE TOOLBOX FOR MATLAB
  7. 私有链和联盟链的机会与挑战
  8. fudannlp java_中文NLP工具
  9. 灵活无成本的ITSM系统|ServiceHot ITSOM
  10. 【Java:JDBC+MySQL实现学生信息管理系统】
  11. 【数据结构和算法】赫夫曼树 | 实战演练
  12. LoadRunner9.1下载与破解
  13. nested exception is java.lang.IllegalArgumentException: Unsupported class file major version 61
  14. 如何用pip升级python版本,python的pip升级没反应
  15. Java实现微信公众号扫描二维码未关注时跳转关注界面已关注跳转业务界面
  16. HTML(1) 实现一个简单的课程表
  17. LeetCode-118
  18. java的jce框架_Java Cryptographic Extension (JCE) 框架的核心应用
  19. Dreamweaver(Dw)2021下载及安装教程
  20. 武林外传为什么显示连接不上服务器,武林外传手游服务器连接失败怎么办 进不去解决方法...

热门文章

  1. html文字特效制作软件,Dreamweaver 制作文字特效
  2. 响铃:刚需之下,代泊真能冷启动汽车后市场?
  3. 回顾2018年十大AI新闻 中国继续占据主导优势
  4. 【人工智能安全】2023/04/03 第一次作业论文
  5. 0.0.1价签墨水屏篇node8266点亮篇[例4.2寸2色3色IC SSD1683]
  6. 谷歌及360极速浏览器Cookie 的查看!
  7. EXACT函数——检验两个数据是否一样
  8. miracast和乐播投屏_手机投屏到电视的5种方法 看完才知道原来这么简单!
  9. 第三天用 Mac,我安装了这些玩意
  10. 微信中使用支付宝手机版,浏览器中打开,PHP完整综合版含回调