DoTween结束后删除对象
2024-10-20 03:50:59
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的方法。
最新文章
- ReactNative 从环境和第一个demo说起,填坑教程
- bootstrapValidator.js 做表单验证
- codeforces 507B. Painting Pebbles 解题报告
- Android View坐标getLeft, getRight, getTop, getBottom
- 进程&;信号&;管道实践学习记录
- 时隔3年,再次折腾BlackBerry 8830!
- 【Hadoop代码笔记】Hadoop作业提交之JobTracker等相关功能模块初始化
- com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: SELECT command denied to user’
- HDU-2149 Public Sale
- eclipse - tomcat 远程调试
- poj 1068 Parencodings(栈)
- myeclipse如何恢复已删除的文件和代码
- Arduino线程库ProtoThreads
- H5 音频
- Unity 游戏框架搭建 (三) MonoBehaviour单例的模板
- python并发编程之多线程二
- spring揭秘 读书笔记 一 IoC初探
- Handler学习小结
- 数据加密算法--详解DES加密算法原理与实现
- ONOS架构-系统组件