//-------------------------------------------------------- // [Author]: 第二世界 // [ Date ]: Tuesday, May 15, 2018 //-------------------------------------------------------- using System; using System.Collections; using System.Collections.Generic; using UnityEngine; using UnityEngine.UI; using DG.Tweening; namespace vnxbqy.UI { public class EffectToFaBaoWin : Window { [SerializeField] UIEffect m_UIEffectFabao; [Header("需要生成的个数")] public int NUMBER = 5; [Header("移动的时间")] public float SPEED = 2f; [Header("需要进行延迟的时间")] public float LOADTIME = 0.1f; [Header("光柱等待播放时间")] public float LightCross = 0.3f; List effectList = new List(); #region Built-in TaskModel m_TaskModel; TaskModel taskmodel { get { return m_TaskModel ?? (m_TaskModel = ModelCenter.Instance.GetModel()); } } public static event Action EffectToFaBaoEvent; protected override void BindController() { } protected override void AddListeners() { } protected override void OnPreOpen() { } protected override void OnAfterOpen() { StartCoroutine("EffectCreateToMove"); } protected override void OnPreClose() { StopCoroutine("EffectCreateToMove"); } protected override void OnAfterClose() { } private void mButton() { } IEnumerator EffectCreateToMove() { yield return null; int width = Screen.width / 2;//获取屏幕一般的宽 int height = Screen.height / 2;//获取屏幕一般的高 SFXPlayUtility.Instance.PlayBattleEffect(5146, taskmodel.UIeffectFabaoVec, Vector3.forward); if (Camera.main == null) { CloseImmediately(); yield break; } Vector3 screenPos = Camera.main.WorldToScreenPoint(taskmodel.UIeffectFabaoVec); // 世界坐标转换成屏幕坐标 Vector3 screenPos2 = new Vector3(screenPos.x - width, screenPos.y - height, 0); var startPoint = WindowCenter.Instance.uiRoot.baseCanvas.TransformPoint(screenPos2); var endPoint = m_UIEffectFabao.transform.position; var direction = Vector3.Normalize(startPoint - endPoint); var normal = new Vector3(-direction.y, direction.x, 0); var distance = Vector3.Distance(startPoint, endPoint); yield return new WaitForSeconds(LightCross); int Type = 0; int Type1 = 0; for (int i = 0; i < NUMBER; i++) { var pivot = startPoint + normal * UnityEngine.Random.Range(-distance, distance) * 0.7f + direction * distance * 0.4f; var effect = EffectMgr.Instance.PlayUIEffect(5134, (int)this.windowInfo.windowType * 1000 + 500,this.transform,true); effect.transform.position = startPoint; var bezierMove = effect.AddMissingComponent(); bezierMove.duration = (SPEED - i * LOADTIME); Type += 1; bezierMove.Begin(startPoint, pivot, endPoint, () => { Type1 += 1; effect.Stop(); DestroyObject(bezierMove); if (Type == Type1) { OnComplet(); } }); } } private void OnComplet() { WindowCenter.Instance.Close(); if (EffectToFaBaoEvent != null) { EffectToFaBaoEvent(); } } #endregion } }