制作敌人简单AI和发射火球

写在前面:
- 学习课本:Unity5实战 使用c#和unity开发多平台游戏-作者:Joseph Hocking
- 内容:第三章
-unity3d学习(一)制作第一人称射击-玩家的视口和移动
-unity3d学习(二)制作第一人称射击-玩家的视口和移动


简单的敌人自动移动(AI)和死亡

第一步:创建一个新脚本 Wandering
给敌人添加Wandering 脚本,并输入以下代码
using UnityEngine;
using System.Collections;public class Wandering: MonoBehaviour
{public float speed = 3.0f;public float obstacleRnage = 5.0f;private bool _alive;//判断用户是否存活void Start () {_alive = true;}void Update(){if(!_alive){return;//如果没有活着,则停止运行下面代码}transform.Translate(0,0,speed*Time.deltaTime);//保持每帧向前移动Ray ray = new Ray(transform.position,transform.forward);//向前面发射一条射线RaycastHit hit;if(Physics.SphereCast(ray,0.75f,out hit)){if(hit.distance<obstacleRnage){float angle = Random.Range(-110,110);transform.Rotate(0,angle,0);}}}public void setAlive(alive){_alive = alive;}
}
第二步:修改ReactiveTarget脚本
...
public void ReactToHit()
{wanderingAI behavior = GetCompent<WanderingAI>()if(behavior){behavior.setAlive(false);}StartCoroutine(Die());
}
...
第三步:给敌人创建预设
添加一个预设体,以便我们后面添加此物体
第四步:添加一个不可见的SceneController空对象
在SceneController中添加SceneController脚本,使当玩家击杀一个敌人,再次生成一个新的敌人
using UnityEngine;
using System.Collections;public class SceneController: MonoBehaviour
{[SerializeField] private GameObject enemyPrefab;//序列化预设对象private GameObject _enemy;void Update(){if(_enemy==null){_enemy = Instantiate(enemyPrefab) as GameObject;_enemy.transform.position = new Vector3(0,1,0);float angle = Random.Range(0,360);_enmey.transform.Rotate(0,angle,0);}}
}

让敌人见到玩家发射火球

第一步:制作一个火球预设体
修改WanderingAI代码,使敌人见到玩家发射一个火球
    ...[SerizeField] private GameObject fireballPrefab;private GameObject _fireball;...if(physics.SphereCat(ray,0.75f,out hit)){GameObject hitObject = hit.transform.gameObject;if(hitObject.GetComponent<PlayerCharacter>())//检测是否时玩家{if(_fireball == null)//检测是否已经发射火球了{_fireball = Instantiate(fireballPrefab) as GameObject;_fireball.transform.position = transform.TransformPoint(Vector3.forward*1.5f);//把相对与此物体的坐标转化为全局坐标}}else if(hit.distance<obstacleRange){float angle = Random,Range(-110,110);transform.Rotate(0,angle,0);}}...
第二步:为球体的Sphere Collider组件的I上Trigger复选框勾上,并为其添加Rigidbody刚体,取消UseGravity选项。再添加Fireball脚本给火球
using UnityEngine;
using System.Collections;public class Fireball : MonoBehaviour {public float speed = 10.0f;public int damage = 5;void Start () {}// Update is called once per framevoid Update () {transform.Translate(0,0,speed*Time.deltaTime);}void OnTriggerEnter(Collider other){PlayerCharacter player = other.GetComponent<PlayerCharacter>();if (player != null){//Debug.Log("Player hit");player.Hurt(damage);}Destroy(this.gameObject);}
}
第三步:为玩家添加PlayCharacter,来记录和计算玩家受到的伤害
using UnityEngine;
using System.Collections;public class PlayerCharacter : MonoBehaviour {private int _health;void Start () {_health = 5;}public void Hurt(int damage){_health -= damage;Debug.Log("Health:"+_health);}
}

注意:很多类和方法不清楚请查看官方文档。

unity3d学习(三)制作敌人简单AI和发射火球相关推荐

  1. Unity3D学习:制作粒子光环特效

    最近看到一个网站,感觉里面的特效不错http://i-remember.fr/en 所以我尝试制作一下里面的粒子光环,鼠标悬停中间的按钮就会粒子收缩,移开就会扩散,先上效果图如下: 下面讲讲思路:首先 ...

  2. 【QT学习】制作一个简单的图片查看器(完整源码)

  3. Android开发学习(4)简单登录界面

    在简单的Hello Android 的基础上,我们进一步学习如果制作一个简单的登录界面(不涉及网络交互,用户名密码先固定为admin ),在这里我们学习获取用户名密码,多个Activity之间跳转. ...

  4. Unity3D游戏开发中的人工智能AI 简单实例

          今天我想说的是游戏中的人工智能.人工智能这个东西在游戏中是非常重要的,人工智能说简单了就是根据随机的数字让敌人执行一些动作或逻辑,说难了TA需要一个非常复杂的算法,本文我主要说说Unity ...

  5. MFC学习笔记之三(粒子系统+怪物简单AI+碰撞检测)

    到上海找到住的地方之后,干的第一件事,就是抓紧时间学习,为了找到工作努力ing... 备注:以下请参考http://blog.csdn.net/hust_xy/article/details/9374 ...

  6. 【Unity2D】实现敌人Enemy简单AI的巡回移动

    上一篇文章:[Unity2D]实现敌人随机简单AI来回移动_dangoxiba的博客-CSDN博客先把制作好动画帧表格导出来,我的是32*32像素的,按下面两张图把参数修改一下,并且裁剪出四张图来,把 ...

  7. 我的Unity3D学习日记-06(自己动手制作FlappyBird)

    自从上次跟着敲了官方示例拾荒者之后,开始对Unity制作2D游戏感兴趣了起来,虽然本文标题叫做Unity3D学习日记.但是Unity其实本来名字里是没有3D这俩字的--很有名的雨血前传 蜃楼就是一个使 ...

  8. 【Unity3d学习】粒子光环的制作——粒子编程初体验

    写在前面 Unity3d学习制作的实验资料包括本次实验都在老师的课程网站上:传送门 视频地址:传送门 实验项目文件在Github上面:Github传送门 实验参考博客:感谢指导! Unity3D学习笔 ...

  9. 9.Unity2D 横版 简单AI 之 敌人跳跃条件优化+自动范围内检测敌人发起攻击(索敌)+对象池优化+主角受伤死亡

    总目录https://blog.csdn.net/qq_54263076/category_11900070.html?spm=1001.2014.3001.5482 1.动画animation和动画 ...

最新文章

  1. 如何定时备份数据库并上传七牛云
  2. python使用matplotlib可视化跨年数值指标中位数变化率、使用pct_change函数计算变化率、年环比变化率(pct_change function)
  3. JUC锁框架——CyclicBarrier
  4. 【CentOS7】安装 mysql client 5.7
  5. Spring+SpringMVC+Mybatis框架整合流程
  6. JArchitect对Java开源贡献者免费
  7. 学习:java原理—反射机制
  8. python每行输出8个式子_多图+代码 | 详解Python操作Excel神器openpyxl的各种操作!
  9. c++ java string_C++中string类型的内部结构是什么?
  10. perl - Java调用perl
  11. [转] linux 下查看一个进程运行路径的方法
  12. 基于Socket的.NET应用组件
  13. php 发送网易企业邮箱
  14. 平面广告设计课程中发散思维训练
  15. 【Android基础知识】选项菜单、上下文菜单、子菜单的使用
  16. 批量ping检测主机状态
  17. oracle11g安装EM配置失败,oracle 11g Enterprise Manager配置失败
  18. JavaScript(九)
  19. mysql读写分离的完整配置
  20. 难道google也这么小气? 安装Chrome后基于ie内核的浏览器ie6、greenbrowser、myie2均无法打开Google 软件精选?

热门文章

  1. 机器学习-吴恩达 p85 笔记
  2. dedecms响应式汽车制造公司网站模板
  3. Java6-7章复习
  4. Java程序设计-佟强
  5. 碱性食物,多吃碱性食物
  6. 了解4-20mA信号
  7. 什么是服务器和服务器的作用
  8. 基于Java的城市轨道交通自助终端设计与实现
  9. html 可移动悬浮按钮,vue实现可移动的悬浮按钮
  10. 使用scp命令, 报 not a regular file的解决办法