主角连击敌人处理:连击次数的显示(图片数字字体)---1
需求分析
具体实现
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相关推荐
- 主角连击敌人处理:连击特效的显示---2
需求分析 在上篇文章中,实现了当主角连击敌人时,显示连击提示以及连击的次数.但是,只是单纯的在敌人受到攻击时(主角攻击时)直接显示出连击的提示.为增加游戏的可玩性,本篇博文拟实现:当主角攻击敌人时,显 ...
- 【cocos creater】7.仿《弓箭传说》- 控制主角朝向敌人
查看项目所有章节 接着上一章,我们添加一个敌人精灵,起名enemy 并在enemy属性中,添加图集,设置图片 得到效果: 新建一个enemy的TypeScript脚本,并将脚本添加到entity精灵上 ...
- 在DataGrid中显示图片
兼谈 DadaGrid 模板列的创建 DadaGrid 是 ASP.NET 编程中一个很重要的控件,其优良的可定制功能为提高它的表现力提供了极大的方便.除了与数据源直接绑定以外,我们还可以通过列绑定模 ...
- python运行完不能显示图_【已解决】Python中通过Image的open之后,去show结果打不开bmp图片,无法正常显示图片...
[问题] 在windows的cmd命令行下,使用Python的PIL库打开并显示一个jpg图片:openedImg = Image.open(saveToFile); print "open ...
- python opencv 拼接 连接 显示 图片
python opencv 拼接 显示 图片 代码 import cv2 import numpy as np # 读取图片 img1 = cv2.imread('1.jpg',1) # 读取图片 i ...
- Flask显示图片并设置图片的缓存时间
1.显示图片 想要Flask在网页中显示图片,需要使用template 模板,例如 index.py from flask import Flask, render_template, url_for ...
- Github无法加载或不显示图片问题
好久以前就发现Github无法加载或不显示图片,最近又严重影响日常使用.查找资料并总结解决步骤如下: 1.Mac终端输入 sudo vi /etc/hosts windows 修改文件WIN(C:\W ...
- image控件显示图片_Unity之Image amp; Raw Image
推荐阅读: 我的CSDN 我的博客园 QQ群:704621321 我的个人博客 前言 在Unity中,图片组件主要有Image和Raw Image,今天,偶然发现了项目中别人有用到Raw Image, ...
- Android训练课程(Android Training) - 高效的显示图片
高效的显示图片(Displaying BitmapsEfficiently) 了解如何使用通用的技术来处理和读取位图对象,让您的用户界面(UI)组件是可响应的,并避免超过你的应用程序内存限制的方式.如 ...
- EmbeddedWebBrowser(EmbeddedWB)不显示图片
在我的项目中使用到了Delphi第三方控件EmbeddedWB,但是不清楚为什么使用EmbeddedWB中的TEmbededWB后图片在第一次访问网页时不加载一些图片,必须要手动在图片上右键显示图片才 ...
最新文章
- 生成对抗网络GAN综述
- struts2文件上传一个错误的解决
- 卡在登陆界面进不去_穿越火线第十三年:需要的不仅仅是新界面,重要还是留住旧玩家...
- win7,ubuntu双系统——重装win7后如何恢复ubuntu引导
- Android之Camera介绍
- Apache Camel 2.16发布–十大亮点
- gvim文本编辑器帮助_如何帮助您的文本编辑器帮助您
- [读书笔记] 计算机组成原理 唐朔飞 (一)基本概念
- report machine实现报表分栏
- 结合实际聊聊电平转换电路(常用电平转换电路总结)
- 用react-custom-scrollbars插件美化 Ant Design Table 滚动条
- 转回到Edison上开发
- android 网络 adb,Android设备通过网络adb 调试
- Snapper 基本入门简介 - 快速浏览和监听
- CSS“隐藏”元素的几种方法的对比
- 冰桶挑战引来了百度搜索冰桶算法
- golang:%v,%+v,%#v区别
- ArcGIS教程:对镶嵌数据集进行色彩平衡
- 基于SSM的小区物业管理系统JAVA【数据库设计、论文、源码、开题报告】
- html5绘制矩形动画,HTML5 Canvas中绘制矩形实例
热门文章
- JBoss下载与JBoss安装
- JDK6和JDK7中String的substring()方法及其差异
- python安装setup.py命令_python安装模块如何通过setup.py安装(超简单)
- QQ资料清空php源码,清除QQ账号所有授权应用 JavaScript代码
- Warez 3D动画,超牛
- 小区物业管理系统c语言,智能小区物业管理系统毕业论文.doc
- TraceView 的使用
- 0+到10+随机数+java_Java随机数总结
- Cisco2811配置Qos实现带宽分流
- 强大好看的dz论坛社区源码手机端