unity3d学习(三)制作敌人简单AI和发射火球
制作敌人简单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和发射火球相关推荐
- Unity3D学习:制作粒子光环特效
最近看到一个网站,感觉里面的特效不错http://i-remember.fr/en 所以我尝试制作一下里面的粒子光环,鼠标悬停中间的按钮就会粒子收缩,移开就会扩散,先上效果图如下: 下面讲讲思路:首先 ...
- 【QT学习】制作一个简单的图片查看器(完整源码)
- Android开发学习(4)简单登录界面
在简单的Hello Android 的基础上,我们进一步学习如果制作一个简单的登录界面(不涉及网络交互,用户名密码先固定为admin ),在这里我们学习获取用户名密码,多个Activity之间跳转. ...
- Unity3D游戏开发中的人工智能AI 简单实例
今天我想说的是游戏中的人工智能.人工智能这个东西在游戏中是非常重要的,人工智能说简单了就是根据随机的数字让敌人执行一些动作或逻辑,说难了TA需要一个非常复杂的算法,本文我主要说说Unity ...
- MFC学习笔记之三(粒子系统+怪物简单AI+碰撞检测)
到上海找到住的地方之后,干的第一件事,就是抓紧时间学习,为了找到工作努力ing... 备注:以下请参考http://blog.csdn.net/hust_xy/article/details/9374 ...
- 【Unity2D】实现敌人Enemy简单AI的巡回移动
上一篇文章:[Unity2D]实现敌人随机简单AI来回移动_dangoxiba的博客-CSDN博客先把制作好动画帧表格导出来,我的是32*32像素的,按下面两张图把参数修改一下,并且裁剪出四张图来,把 ...
- 我的Unity3D学习日记-06(自己动手制作FlappyBird)
自从上次跟着敲了官方示例拾荒者之后,开始对Unity制作2D游戏感兴趣了起来,虽然本文标题叫做Unity3D学习日记.但是Unity其实本来名字里是没有3D这俩字的--很有名的雨血前传 蜃楼就是一个使 ...
- 【Unity3d学习】粒子光环的制作——粒子编程初体验
写在前面 Unity3d学习制作的实验资料包括本次实验都在老师的课程网站上:传送门 视频地址:传送门 实验项目文件在Github上面:Github传送门 实验参考博客:感谢指导! Unity3D学习笔 ...
- 9.Unity2D 横版 简单AI 之 敌人跳跃条件优化+自动范围内检测敌人发起攻击(索敌)+对象池优化+主角受伤死亡
总目录https://blog.csdn.net/qq_54263076/category_11900070.html?spm=1001.2014.3001.5482 1.动画animation和动画 ...
最新文章
- 如何定时备份数据库并上传七牛云
- python使用matplotlib可视化跨年数值指标中位数变化率、使用pct_change函数计算变化率、年环比变化率(pct_change function)
- JUC锁框架——CyclicBarrier
- 【CentOS7】安装 mysql client 5.7
- Spring+SpringMVC+Mybatis框架整合流程
- JArchitect对Java开源贡献者免费
- 学习:java原理—反射机制
- python每行输出8个式子_多图+代码 | 详解Python操作Excel神器openpyxl的各种操作!
- c++ java string_C++中string类型的内部结构是什么?
- perl - Java调用perl
- [转] linux 下查看一个进程运行路径的方法
- 基于Socket的.NET应用组件
- php 发送网易企业邮箱
- 平面广告设计课程中发散思维训练
- 【Android基础知识】选项菜单、上下文菜单、子菜单的使用
- 批量ping检测主机状态
- oracle11g安装EM配置失败,oracle 11g Enterprise Manager配置失败
- JavaScript(九)
- mysql读写分离的完整配置
- 难道google也这么小气? 安装Chrome后基于ie内核的浏览器ie6、greenbrowser、myie2均无法打开Google 软件精选?