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. elasticsearch相关概念及常用操作汇总

    背景 我本来是想把我的写的es的平时总结dsl发出来的,但是我发现只搞那个意义大不.干脆多写点吧. 索引的结构化和非结构 我们经常用数据库,当然会经常用到索引. 然后从索引的维度去分析,系统分为结构化 ...

  2. Linux route命令修改默认路由优先级

    (自测可用)摘自:https://www.cnblogs.com/luoyang712/p/11953256.html 在多个网络连接的情况下,比如以太网和WIFI同时存在的时候,路由表中就会存在多个 ...

  3. 面了几个说自己精通 Vue 的同学,实在一言难尽……

    请说一下响应式数据的原理 默认 Vue 在初始化数据时,会给 data 中的属性使用 Object.defineProperty 重新定义所有属性,当页面到对应属性时,会进行依赖收集 (收集当前组件中 ...

  4. Hsm状态机init()和dispatch()流程

    (LCA)共同祖先状态:首先找到s(原状态)能处理t(目标状态)的超状态,然后找到t(目标状态)到上一步超状态的退出路径p[]并保存,最后沿着退出路径进入t目标状态. QHsm_dispatch_(Q ...

  5. vue 使用路由component: () =>import (‘ ‘)报错解决办法

    今天帮朋友调代码的时候,在人家的mac上面,项目没有任何错误,到我这里就出现 component: () =>import (' ')加载路由错误. 发现是import处报错, import 属 ...

  6. AWG含义及尺寸电流对照表-转载

    AWG含义及尺寸电流对照表 - 麦穗鱼~ - 博客园 (cnblogs.com) AWG(American wire gauge)美国线规,是一种区分导线直径的标准,又被称为 Brown & ...

  7. 自定义Ribbon负载均衡

    需要在基包的上一级定义,不然会被扫到如:com.cn.me,要和me同级 然后自定义两个类 DshzsRandomRule类写自己定义的算法,DshzsRule写注入的bean import com. ...

  8. virtualBox虚拟机中安装linux系统并连接

    1.安装virtualBox 1.1.下载 virtualBox是免费的,直接去官网下载 https://www.virtualbox.org/ 在官网左侧找到Downloads,下载需要的版本 1. ...

  9. 一条sql同时返回多个count结果

    select * from (select alarm_content name, count(id) `count` from ai_alarm WHERE alarm_content IS NOT ...

  10. CentOS 7.4使用yum源安装MySQL 5.7.20

    CentOS 7.4使用yum源安装MySQL 5.7.20 小牛教程 InnoDB存储引擎 2022年11月25日 从CentOS 7.0发布以来,yum源中开始使用Mariadb来代替MySQL的 ...