人物和怪物的攻击都有CD冷却,在PlayerAttack脚本中添加成员

    //冷却倒计时
public float attackTimer;
//CD冷却时间
public float coolDown = 2.0f;

修改Update

    void Update () {
if (attackTimer > )
attackTimer -= Time.deltaTime;
if (attackTimer < )
attackTimer = ; if (Input.GetKeyUp (KeyCode.F) && attackTimer == ) {
Attack();
attackTimer = coolDown;
}
}

运行Game,点击F后,AttackTimer从2到0后才可再次释放攻击。

下面创建怪物的攻击脚本,在Scripts文件夹中选中PlayerAttack,按ctrl+d,赋值一份,重命名为EnemyAttack:

1. 修改类名为EnemyAttack
2. 删除对按键F输入的判断,怪物始终2秒攻击一次玩家
3. 修改Attack内的EnemyHealth为PlayerHeath类

public class EnemyAttack : MonoBehaviour {
public GameObject target;
//冷却倒计时
public float attackTimer;
//CD冷却时间
public float coolDown = 2.0f;
// Use this for initialization
void Start () { } // Update is called once per frame
void Update () {
if (attackTimer > )
attackTimer -= Time.deltaTime;
if (attackTimer < )
attackTimer = ; if (attackTimer == ) {
Attack();
attackTimer = coolDown;
}
} private void Attack(){
if (Vector3.Distance (target.transform.position, transform.position) < ) {
PlayerHealth ph = (PlayerHealth)target.GetComponent ("PlayerHealth");
ph.AddjustCurrentHealth (-);
}
}
}

运行Game,玩家和怪物靠近时,每隔2秒,玩家掉血10,玩家按下F,怪物掉血10。

但是有个问题,上图可以看到怪物和玩家距离过近,并且有抖动,那是因为EnemyAI里的向玩家移动的代码,没有限制为,当距离大于2的时候,怪物才向玩家移动,将该距离定义为类的全局变量maxDistance,方便进行修改。

//当距离大于2的时候
if (Vector3.Distance (target.position, myTransform.position) > maxDistance) {
//怪物向着Player的方向移动
myTransform.position += myTransform.forward * moveSpeed * Time.deltaTime;
}

简单3d RPG游戏 之 004 攻击(二)的更多相关文章

  1. 简单3d RPG游戏 之 004 攻击(一)

    功能:实现点击键盘F键,怪物血量条减少,并且假定是近战,需要对距离进行判断,距离小于一定值的时候按F才会减少怪物的血条. 新建c#脚本PlayerAttack,绑定到Player,并在unity里将敌 ...

  2. 简单3d RPG游戏 之 002 生命条(二)

    在游戏中,游戏人物的血条可能会因为受伤或吃血瓶而长度变化,所以需要将血条的长度单独提出来作为一个变量,方便直接修改数值. public float healthBarLength; 改变生命值函数如下 ...

  3. 简单3d RPG游戏 之 005 选择敌人

    选择一个敌人,按ctrl+d,复制出3个,调整一下它们的位置,不重叠,修改Tag为Enemy,禁用EnemyAI. 创建Targetting脚本,绑定到Player玩家对象 public class ...

  4. 简单3d RPG游戏 之 003 怪物AI

    游戏中,怪物会自动的往玩家所在地点走去,那需要创建一个C#脚本EnemyAI,包含两个功能: 1. 怪物旋转自己对准玩家 2. 怪物向前移动,追逐玩家 public class EnemyAI : M ...

  5. 简单3d RPG游戏 之 001 生命条(一)

    1.创建一个新项目,引用如下的包: 2.将asset里的First Person Controller拖入project作为游戏角色,将其命名为Player,将mainCamera删除,这样就是用Pl ...

  6. 使用HTML5制作简单的RPG游戏

    很久以前就想着做一个游戏,但什么都不会又不知道从哪里开始,胡乱找来一些书籍和资料结果太深奥看不懂,无奈只能放弃.这一弃就是十多年,倥偬半生,眼看垂垂老矣,还是没能有什么成果. 近年来游戏引擎越来越多, ...

  7. 3D单机游戏《天鹰教》源码发布(二)

    3D单机游戏<天鹰教>源码发布 作者 作者: 游蓝海 博客: http://blog.csdn.net/you_lan_hai mail:     you_lan_hai@foxmail. ...

  8. 张瀚荣:如何用UE4制作3D动作游戏

    转自:http://www.gamelook.com.cn/2015/06/218267 GameLook报道/ 6月5日,2015年第三期GameLook开放日‧虚幻引擎专场活动在上海正式举行,此次 ...

  9. 【android原生态RPG游戏框架源码】

    转载请注明原创地址:http://www.cnblogs.com/zisou/p/android-RPG.html 这份源码是在今年6月份写的,当时公司有一个技术部们的学习讨论的讲座,然后我自己就写了 ...

随机推荐

  1. (转载)ConcurrentHashMap 原理

    集合是编程中最常用的数据结构.而谈到并发,几乎总是离不开集合这类高级数据结构的支持.比如两个线程需要同时访问一个中间临界区 (Queue),比如常会用缓存作为外部文件的副本(HashMap).这篇文章 ...

  2. Web Service 一些对外公开的网络服务接口

    商业和贸易: 1.股票行情数据 WEB 服务(支持香港.深圳.上海基金.债券和股票:支持多股票同时查询) Endpoint: http://webservice.webxml.com.cn/WebSe ...

  3. [译]脱离jQuery,使用原生Ajax

    脱离jQuery,使用原生Ajax 标签: Ajax translate 英文出处:<A Guide to Vanilla Ajax Without jQuery> 翻译: 刘健超 J.c ...

  4. Jersey(1.19.1) - Client API, Uniform Interface Constraint

    The Jersey client API is a high-level Java based API for interoperating with RESTful Web services. I ...

  5. 编译mosquitto出现的问题

    [root@localhost mosquitto-1.3]# make WITH_TLS=no set -e; for d in lib client src; do make -C ${d}; d ...

  6. 客户端javascript笔记

    html 中的 onclick访问的是全局作用域

  7. javascript笔记——点击按钮(或超链接)如何跳转到另外一个页面并执行目标页面的js函数

    页面跳转同时执行js代码$(function(){});url参数传递 标题的前半部分其实不必赘述,按钮也可以换成超链接.. 假设是需要在A页面上的一个按钮,点击后跳转到B页面,传一些参数后且并B页面 ...

  8. 【转】简单理解socket

    题外话 前几天和朋友聊天,朋友问我怎么最近不写博客了,一个是因为最近在忙着公司使用的一些控件的开发,浏览器兼容性搞死人:但主要是因为这段时间一直在看html5的东西,看到web socket时觉得很有 ...

  9. 《RedHatlinux系统修复(通过FTP进行修复)》

    比如我们删除了grub文件的initrd然后我们来修复 Linux系统下装的虚拟机boot options 位置,我们选网络修复,提前是我已经做好了ftpbootlaoder的配置. Win系统下以V ...

  10. GDB 进行调试 使用心得

    GDB 进行调试 使用心得 转 1: 对于在应用程序中加入参数进行调试的方法:   直接用 gdb app -p1 -p2 这样进行调试是不行的.   需要像以下这样使用:    #gdb app   ...