需求分析

实现的功能:当主角连击敌人时,显示连击提示以及连击的次数。

具体实现

1. 利用NGUI在Unity 2D模式下创建UISprite(资源为Atlas文件夹下的Combo贴图),并命名为BgCombo。然后,在BgCombo下创建UILabel作为Child,并命名为numberLabel。

2. UILabel的字体为上篇博文中制作的数字字体Prefab;设置相关参数,如下图所示:

3. 给BgCombo添加脚本:Combo.cs,代码如下:

using UnityEngine;
using System.Collections;/** Noted by @BigoSprite 20160603* 需求分析:当主角连续攻击敌人时会出现“连击的提示”。* 实现方案:当敌人受到攻击时,需要调用ComboPlus()以显示连击数的提示*            敌人受到伤害是在Enemy脚本中* * 注意:该脚本挂在连击Combo这个Sprite上*/public class Combo : MonoBehaviour {public static Combo _instance; // 单例模式public float comboTime = 2;    //  连击时间private int comboCount = 0;    // 连击数private float timer = 0;private UILabel numberLable; // 控制连击次数的UILabelvoid Awake () {_instance = this;numberLable = transform.Find ("numberLabel").GetComponent<UILabel> ();// 没连击时,默认不显示this.gameObject.SetActive(false);}// Update is called once per framevoid Update () {timer -= Time.deltaTime;if (timer <= 0) {// 计时器<=0==>不连击了this.gameObject.SetActive (false);comboCount = 0;}}// 控制连击的方法public void ComboPlus(){this.gameObject.SetActive (true);// 发生连击时,把Combo显示出来timer = comboTime; comboCount++;// UILabel中的text属性控制数字的显示numberLable.text = comboCount.ToString ();}
}

4. 在Enemy脚本中,当敌人受到伤害时(这时主角攻击了敌人),调用ComboPlus方法,以显示连击及其次数;代码如下:

//using UnityEngine;
//using System.Collections;
//
//public class Enemy : MonoBehaviour {
//  public static Enemy _instance;
//
//  public GameObject damageEffectPrefab;// 受到攻击时的出血特效
//  public int hp = 200;
//
//  public Transform bloodPoint;// 敌人受伤时候的出血点位置的Transform组件
//
//  public float speed = 2f;// 敌人行走的速度
//  private CharacterController cc; // 定义控制敌人行走的CharacterController组件
//
//  // **********
//  public float attackRate = 2;      // 攻击速率,2s攻击一次
//  private float attackDistance = 2; // 敌人发生攻击需要的距离
//  private float distance = 0;       // 敌人和主角的距离
//  private float attackTimer = 0;
//
//  private float downSpeed = 1;
//  private float downDistance = 0;
//
//
//  void Awake(){
//      _instance = this;
//  }
//
//
//  void Start(){
//      cc = this.GetComponent<CharacterController> ();//  得到CharacterController组件
//      // 通过协同来计算距离,以优化在Update中逐帧调用CalcDistance而消耗的性能
//      InvokeRepeating("CalcDistance", 0, 0.1f);
//  }
//
//  void Update(){
//
//      if (hp <= 0) {// true==>敌人死亡
//          // 移到地下
//          transform.Translate(-transform.up * downSpeed * Time.deltaTime);
//          downDistance += downSpeed * Time.deltaTime;// 下落的距离
//          if(downDistance > 3/*敌人死亡后下落超过3m后销毁死的敌人,节约性能*/){
//              GameObject.Destroy (this.gameObject);
//          }
//          return;
//      }
//
//
//      if (distance < attackDistance) {// true==>敌人攻击
//          attackTimer += Time.deltaTime;
//          if (attackTimer > attackRate) {
//              // 攻击之前面向主角
//              // 本代码中获取主角调用多次,可以在Start反方中进行初始化以进行优化,这里仅供学习用,方便清楚代码整个框架(逻辑)
//              Transform player = TranscriptManager._instance.player.transform;
//              Vector3 targerPos = player.position;
//              targerPos.y = transform.position.y;
//              transform.LookAt(targerPos);
//              // **************************************
//              GetComponent<Animation>().Play("attack01");// 其中attack01为敌人攻击的动画
//              attackTimer = 0;
//          }
//
//          if (!GetComponent<Animation> ().IsPlaying ("attack01")) {
//              GetComponent<Animation> ().CrossFade ("idle");
//          }
//
//      } else {
//          GetComponent<Animation> ().Play ("walk");// 播放行走的动画
//          Move ();// 在Update方法中,每一帧调用Move方法
//      }
//
//  }
//
//  // *******************计算距离***********************************************
//  void CalcDistance(){
//      Transform player = TranscriptManager._instance.player.transform;
//      distance = Vector3.Distance (player.position, this.transform.position);
//  }
//
//
//  // *********************** 控制敌人AI行走的方法 *********************************
//  void Move(){
//      // 需求分析:要实现敌人总是朝着游戏主角行走
//
//      // 1. 首先获取主角相关组件
//      // 主角的Transform组件
//      Transform player = TranscriptManager._instance.player.transform;// 获取主角由TranscriptManager类管理
//      Vector3 targerPos = player.position;
//      targerPos.y = transform.position.y;// 敌人的y和主角的y一致
//
//      // 2. 面向主角
//      transform.LookAt(targerPos); // this/*敌人*/.transform.LookAt(targetPos)
//
//      // 3. 敌人移动
//      cc.SimpleMove (transform.forward * speed);
//
//  }
//
//  // ********* 受到攻击就调用该方法 *************
//  // 0. 受到多少伤害
//  // 1. 浮空和后退的距离
//  void TakeDamage(string args){
//      if (hp <= 0)
//          return;// ----- 受到攻击时,须显示连击数 -------Combo._instance.ComboPlus();
//
//
//
//      string[] proArray = args.Split (',');
//
//      // 减去伤害值
//      int damage = int.Parse(proArray[0]);// 获取某种攻击的伤害值,比如普通攻击
//      hp -= damage;
//      // 受到攻击的动画
//      Debug.Log("takedamage");
//      GetComponent<Animation>().Play ("takedamage");
//
//      // ******浮空和后退*****
//      float backDistance  = float.Parse(proArray[1]);
//      print (backDistance);
//      float jumpHeight = float.Parse(proArray[2]);
//      print (jumpHeight);
//      // 当主角攻击敌人时,敌人向后移动,依然使用iTween
//      iTween.MoveBy(this.gameObject,
//          transform.InverseTransformDirection(TranscriptManager._instance.player.transform.forward)*backDistance + Vector3.up*jumpHeight,
//          0.3f);
//      // 出血特效,首先获取特效,定义public变量并赋值
//      /*  -----------把敌人受伤时的音效挂在这个damageEffectPrefab上岂不是更好,在Inspector面板设置----------- */
//      GameObject.Instantiate(damageEffectPrefab, bloodPoint.position,Quaternion.identity);
//
//      print ("take damage");// ****************************
//
//      // 死亡
//      if(hp <= 0){
//          Dead ();
//          return;
//      }
//
//  }
//  // 当敌人死亡时调用该方法
//  void Dead(){
//      GetComponent<Animation> ().Play ("die");
//  }
//}

效果

主角连击敌人处理:连击次数的显示(图片数字字体)---1相关推荐

  1. 主角连击敌人处理:连击特效的显示---2

    需求分析 在上篇文章中,实现了当主角连击敌人时,显示连击提示以及连击的次数.但是,只是单纯的在敌人受到攻击时(主角攻击时)直接显示出连击的提示.为增加游戏的可玩性,本篇博文拟实现:当主角攻击敌人时,显 ...

  2. 【cocos creater】7.仿《弓箭传说》- 控制主角朝向敌人

    查看项目所有章节 接着上一章,我们添加一个敌人精灵,起名enemy 并在enemy属性中,添加图集,设置图片 得到效果: 新建一个enemy的TypeScript脚本,并将脚本添加到entity精灵上 ...

  3. 在DataGrid中显示图片

    兼谈 DadaGrid 模板列的创建 DadaGrid 是 ASP.NET 编程中一个很重要的控件,其优良的可定制功能为提高它的表现力提供了极大的方便.除了与数据源直接绑定以外,我们还可以通过列绑定模 ...

  4. python运行完不能显示图_【已解决】Python中通过Image的open之后,去show结果打不开bmp图片,无法正常显示图片...

    [问题] 在windows的cmd命令行下,使用Python的PIL库打开并显示一个jpg图片:openedImg = Image.open(saveToFile); print "open ...

  5. python opencv 拼接 连接 显示 图片

    python opencv 拼接 显示 图片 代码 import cv2 import numpy as np # 读取图片 img1 = cv2.imread('1.jpg',1) # 读取图片 i ...

  6. Flask显示图片并设置图片的缓存时间

    1.显示图片 想要Flask在网页中显示图片,需要使用template 模板,例如 index.py from flask import Flask, render_template, url_for ...

  7. Github无法加载或不显示图片问题

    好久以前就发现Github无法加载或不显示图片,最近又严重影响日常使用.查找资料并总结解决步骤如下: 1.Mac终端输入 sudo vi /etc/hosts windows 修改文件WIN(C:\W ...

  8. image控件显示图片_Unity之Image amp; Raw Image

    推荐阅读: 我的CSDN 我的博客园 QQ群:704621321 我的个人博客 前言 在Unity中,图片组件主要有Image和Raw Image,今天,偶然发现了项目中别人有用到Raw Image, ...

  9. Android训练课程(Android Training) - 高效的显示图片

    高效的显示图片(Displaying BitmapsEfficiently) 了解如何使用通用的技术来处理和读取位图对象,让您的用户界面(UI)组件是可响应的,并避免超过你的应用程序内存限制的方式.如 ...

  10. EmbeddedWebBrowser(EmbeddedWB)不显示图片

    在我的项目中使用到了Delphi第三方控件EmbeddedWB,但是不清楚为什么使用EmbeddedWB中的TEmbededWB后图片在第一次访问网页时不加载一些图片,必须要手动在图片上右键显示图片才 ...

最新文章

  1. 生成对抗网络GAN综述
  2. struts2文件上传一个错误的解决
  3. 卡在登陆界面进不去_穿越火线第十三年:需要的不仅仅是新界面,重要还是留住旧玩家...
  4. win7,ubuntu双系统——重装win7后如何恢复ubuntu引导
  5. Android之Camera介绍
  6. Apache Camel 2.16发布–十大亮点
  7. gvim文本编辑器帮助_如何帮助您的文本编辑器帮助您
  8. [读书笔记] 计算机组成原理 唐朔飞 (一)基本概念
  9. report machine实现报表分栏
  10. 结合实际聊聊电平转换电路(常用电平转换电路总结)
  11. 用react-custom-scrollbars插件美化 Ant Design Table 滚动条
  12. 转回到Edison上开发
  13. android 网络 adb,Android设备通过网络adb 调试
  14. Snapper 基本入门简介 - 快速浏览和监听
  15. CSS“隐藏”元素的几种方法的对比
  16. 冰桶挑战引来了百度搜索冰桶算法
  17. golang:%v,%+v,%#v区别
  18. ArcGIS教程:对镶嵌数据集进行色彩平衡
  19. 基于SSM的小区物业管理系统JAVA【数据库设计、论文、源码、开题报告】
  20. html5绘制矩形动画,HTML5 Canvas中绘制矩形实例

热门文章

  1. JBoss下载与JBoss安装
  2. JDK6和JDK7中String的substring()方法及其差异
  3. python安装setup.py命令_python安装模块如何通过setup.py安装(超简单)
  4. QQ资料清空php源码,清除QQ账号所有授权应用 JavaScript代码
  5. Warez 3D动画,超牛
  6. 小区物业管理系统c语言,智能小区物业管理系统毕业论文.doc
  7. TraceView 的使用
  8. 0+到10+随机数+java_Java随机数总结
  9. Cisco2811配置Qos实现带宽分流
  10. 强大好看的dz论坛社区源码手机端