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. 结合ChatGPT体验新必应new bing 的惊喜:这是我第一次使用的感受

    前言 最近相信大家都被 ChatGPT 刷屏了,它的爆火大家是有目共睹的,微软的新必应(New Bing) 是结合了比 ChatGPT 更强大的新一代 OpenAI 语言模式,接下来我们一起来&quo ...

  2. TCP怎样保证可靠传输

    TCP的可靠性保证 TCP主要提供了检验和,序列号/确认应答,超时重传,最大消息长度,滑动窗口控制等方法实现了可靠性传输. 检验和 通过检验和的方式,接收端可以检测出来数据是否有差错和异常,假如有差错 ...

  3. vue - video视频播放完后重置播放,离开页面暂停所有视频,轮播切换后暂停播放所有视频

    描述:基于vue-awesome-swiper的多视频处理 slideChangeTransitionEnd:轮播切换时暂停播放 父组件 <swiper ref="mySwiper&q ...

  4. 28.yield return 语法

    一.yield return 该语句可以实现在 foreach 循环中,在其他方法边遍历边输出.如下: class Program { private List<int> list = n ...

  5. Qt控制台输出显示乱码

    Qt控制台输出显示乱码 https://jingyan.baidu.com/article/ab69b2709aab0b2ca7189f3d.html

  6. 基于Spring AOP切面实现请求入参出参加解密

    1.Mavne导入加密解密所需的依赖 <dependency> <groupId>org.apache.commons</groupId> <artifact ...

  7. transformers 之Trainer对应的数据加载

    基础信息说明 本文以Seq2SeqTrainer作为实例,来讨论其模型训练时的数据加载方式 预训练模型:opus-mt-en-zh 数据集:本地数据集 任务:en-zh 机器翻译 数据加载 Train ...

  8. 使用 symfony 框架时 配置运行环境时 报debug 工具栏问题及 No input file specified.

    错误一: 错误二:点击跳转时:No input file specified. 解决方法:配置nginx.conf时 增加以下代码: location / { index app_dev.php; t ...

  9. Pycharm去除白色波浪线

  10. 记录将Base64字符串转化为图片遇到的问题

    今天通过与别人写的api交互,获取到了一个原为图片的base64字符串,在网上找到了相互转换的方法,但是在转化时,报出了"输入不是有效的 Base64 字符串,因为它包含非 base 64 ...