using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
using DG.Tweening; public class UIDamage : MonoBehaviour { public Text numText;
private Camera uiCamera;
RectTransform rectTrans;
List<Tween> numList = new List<Tween>();
void Awake() {
uiCamera = CameraController.Instance.transform.GetComponentInChildren<Camera>();
rectTrans = transform.GetComponent<RectTransform>();
EventCenter.AddListener<Vector3, int, int>(EGameEvent.ShowEffectNumber, ShowEffectNumber);
} //public void ConnectButonOnClick() {
// UIManager.Instance.PushPanel(UIType.CONNECT_PANEL);
//}
private void OnDestroy()
{
EventCenter.AddListener<Vector3, int, int>(EGameEvent.ShowEffectNumber, ShowEffectNumber);
} /// <summary>
/// 根据EffectType不同显示不同颜色,或者不同内容
/// </summary>
/// <param name="worldPos"></param>
/// <param name="effectNum"></param>
/// <param name="effectType"></param>
void ShowEffectNumber(Vector3 worldPos, int effectNum, int effectType)
{
Vector2 v2 = WorldToUgui(worldPos);
Text num = Object.Instantiate(numText); num.transform.SetParent(this.transform);
num.transform.localPosition = new Vector3(v2.x, v2.y, 0);
num.transform.localScale = Vector3.one;
num.transform.localEulerAngles = Vector3.zero;
num.gameObject.SetActive(true);
num.text = "-" + effectNum;
Tweener tween = num.transform.DOLocalMoveY(num.transform.localPosition.y + 100, 2f);
tween.SetAutoKill(false);
numList.Add(tween);
tween.OnComplete(MyComplete);
}
void MyComplete()
{
for(int i= numList.Count - 1; i > -1; i--)
{
if (numList[i].IsComplete())
{
numList[i].Kill();
Destroy((numList[i].target as Transform).gameObject);
numList.RemoveAt(i);
}
}
}
/// <summary>
/// 将世界坐标转换为Ugui坐标
/// 这种算法,cavas不能用填充,只能用居中
/// </summary>
/// <param name="position"></param>
/// <returns></returns>
public Vector2 WorldToUgui(Vector3 position)
{ Vector2 screenPoint = Camera.main.WorldToScreenPoint(position);//世界坐标转换为屏幕坐标
Vector2 screenSize = new Vector2(Screen.width, Screen.height);
screenPoint -= screenSize / 2;//将屏幕坐标变换为以屏幕中心为原点
Vector2 anchorPos = screenPoint / screenSize * rectTrans.sizeDelta;//缩放得到UGUI坐标
return anchorPos;
}
}

这里的numList[i].target,是Tween.target。是调用DOLocalMoveY的对象。所以这里是个Transform。

这里还有一个世界转UGUI的方法。

DoTween结束后删除对象的更多相关文章

  1. Iterator的remove方法可保证从源集合中安全地删除对象(转)

    如果对正在被迭代的集合进行结构上的改变(即对该集合使用add.remove或clear方法),那么迭代器就不再合法(并且在其后使用该迭代器将会有ConcurrentModificationExcept ...

  2. JPA学习---第七节:使用JPA加载_更新_删除对象

    1.添加数据,代码如下: @Test public void save(){ EntityManagerFactory factory = Persistence.createEntityManage ...

  3. LOB对象在数据泵导出、导入后查询对象数量发现丢失

    问题描述:问题:源库的某个Schema使用数据泵Expdp元数据整体导出,在目标库导入且成功后,逻辑验证用户对象,发现缺失.分析查询后,缺失的对象,都是LOB类型(并不是所有的LOB都无法导入,是大部 ...

  4. Matlab 程序结束后发送短信或者邮件

    近期,在服务器上运行matlab程序,由于数据比较多,程序比较复杂,运行时间不固定,而且需要经常改变参数,重复运行几次,所以不清楚程序何时结束,以便于修改参数,继续运行.开始有时间就看看程序是否运行结 ...

  5. kubernetes命令式容器应用编排/部署应用/探查应用详情/部署service对象/扩缩容/修改删除对象

    部署Pod应用 创建delpoyment控制器对象 [root@master ~]# kubectl run myapp --image=ikubernetes/myapp:v1 --port=80 ...

  6. js中,清空对象(删除对象的属性)

    在项目中,有些对象用完后需要重置,下面简单介绍下JS中清除对象的方法.方法如下: 方法一:字面量定义对象 第一步,定义一个空对象并打印出来,代码和效果: 代码: var student = {};co ...

  7. javascript:delete 删除对象的属性

    delete 运算符删除对以前定义的对象属性或方法的引用. 不可以删除的如下: 1通过var定义的变量 var a=1;delete a//false 2 声明后的函数 function a(){}; ...

  8. 如何让线程A等待B执行结束后执行?

    1. 使用条件变量 判断是否任务B已经做完,然后再执行任务A. 测试代码可看:https://blog.csdn.net/guochao6531/article/details/78075882 2. ...

  9. js 清空对象\删除对象的属性

    在项目中,有些对象用完后需要重置,下面简单介绍下JS中清除对象的方法.方法如下: 方法一:字面量定义对象 第一步,定义一个空对象并打印出来,代码和效果: 代码: var student = {};co ...

  10. WPF XAML Trigger中使用动画后 动画对象冻结的处理办法

    在编写XAML时 在Trigger中使用动画,在动画之后,动画对象就会被冻结,无法被其他动画或者属性改变. 处理办法有: 1 使用附加属性来添加动画 public static readonly De ...

随机推荐

  1. 路飞项目使用mysql数据库详细讲解

    目录 一.首先需要彻底删除原有的数据库步骤 二.去官网下载mysql步骤 三.安装mysql数据库步骤 四.一管理员身份进去cmd进行一系列命令启动 五.接下来为路飞项目创建数据库 六.luffy项目 ...

  2. Compiler25th005: Excel Compiler

    Excel Compiler XCell Compiler, also known as Excel Compiler, offers very strong and hassle free Micr ...

  3. Google Webstore Config

    1.使用Edge浏览.下载并安装 iGG谷歌访问助手 - Microsoft Edge Addons 登录https://microsoftedge.microsoft.com/addons/sear ...

  4. inspeckage

    c:\ChangZhi\dnplayer2   d:\ChangZhi\dnplayer2然后在电脑的 terminal 中执行 " 端口转发 " 命令:adb forward t ...

  5. CF623A Graph and String

    个人思路: 显然,和其他所有点连边的点都是 b.我们接下来不考虑这些点. 剩余 a 和 c 必然自己形成一个连通块,每个点与块内其他所有点连边. 超过 \(2\) 个连通块,或存在点没有与块内其他所有 ...

  6. kolla

    kolla项目是为了容器化openstack,目标是做到100个节点的开箱即用,所有的组件的HA都具备.kolla是一个革命性的项目,我们以前积累的安装部署经验,全部都报废.使用kolla可以快速部署 ...

  7. redis底层数据结构之压缩列表(ziplist)

    压缩列表(ziplist) 压缩列表(ziplist)是redis 为了节约内存而开发的,由连续内存块组成的顺序型数据结构,适用于长度较小的值 存取的效率高,内存占用小,但由于内存是连续的,在修改的时 ...

  8. redis之五种基本数据类型

    五种基本数据类型 redis存储任何类型的数据都是以key-value形式保存,并且所有的key都是字符串,所以讨论基础数据结构都是基于value的数据类型 常见的5种数据类型是:String.Lis ...

  9. Lua文件夹及文件操作

    转载于:CSDN-刘长栋 -[[ @引用:require("FileLib") @调用:fileLib.createFolder(path) @功能: 1.创建文件夹 2.连续创建 ...

  10. 面试题 --MySQL索引

    InnoDB引擎与MyISAM引擎的区别 ? InnoDB支持事务,MyISAM不支持事务 InnoDB支持行级锁,表级锁,MyISAM只支持表级锁 InnoDB支持外键,MyISAM不支支持外键 I ...