using System.Collections; using System.Collections.Generic; using UnityEngine; namespace YLBattle { public class FightingTipManager : MonoBehaviour { /// /// 画布 /// private Canvas m_Canvas = null; /// ///坐标 /// private RectTransform rectTransform; /// /// 实例 /// static FightingTipManager mInstance; /// /// 获取单键 /// /// 单键实例 public static FightingTipManager Instance { get { if (mInstance == null) { GameObject obj = GameObject.Find("FightingTipManager"); if (obj != null) { mInstance = obj.AddComponent(); } } return mInstance; } } void Start() { m_Canvas = GetComponent(); rectTransform = m_Canvas.transform as RectTransform; } /// /// 在目标位置(UI层)上创建特效 /// /// 目标Id /// 资源名称 /// 位置类型 0=transform脚底 1=shoot/hit 2=指定位置 public void createPosEffect(string Id, string resName, Vector3 pos, int posType = 0, float time = 1.0f) { Fighter target = FightingManager.Instance.GetFighter(Id); #region 加载准备阶段光效 ResourceHelper.Instance.LoadAssetBundle(resName, ab => { if (ab != null) { GameObject comUIEff = (GameObject)Instantiate(ab.LoadAsset(resName)); Vector3 targetPos = Vector3.zero; if (posType == 2) { targetPos = WorldToGUI(pos); } else if (target != null) { if (posType == 1) { if (target.mTeam == EBattleTeam.REDTEAM) { targetPos = WorldToGUI(target.mBodyCenterPos); } else { targetPos = target.mBodyCenterPos; } } else { if (target.mTeam == EBattleTeam.REDTEAM) { targetPos = WorldToGUI(target.mBodyRootPos); } else { targetPos = target.mBodyRootPos; } } } this.TranformHandle(comUIEff.transform, targetPos); ExplodeBase exloreScript = comUIEff.GetComponent(); if (exloreScript != null) { exloreScript.enabled = false; } ///(用于非战斗的定点位置爆炸跟踪使用) ExplodeTraceBase explode = comUIEff.GetComponent(); if (explode == null) { explode = comUIEff.AddComponent(); } explode.lifeTime = time; explode.TargetId = Id; explode.posType = posType; } else { LogHelper.LogWarning("特效模版数据有误!!! " + resName); } }); #endregion } /// /// /// /// public Vector3 WorldToGUI(Vector3 orgPos) { Vector2 pos; Vector3 screenPos = CameraManager.Instance.SenceCamara.WorldToScreenPoint(orgPos); RectTransformUtility.ScreenPointToLocalPointInRectangle(this.rectTransform, screenPos, CameraManager.Instance.SenceTIPCamera, out pos); return pos; } /// /// Tranform的处理,3D->UI /// /// /// public void TranformHandle(Transform model, Vector3 trgPos) { Transform[] all = model.GetComponentsInChildren(); ///默认UI相机照射所有特效 ///如果是bomb在敌人身上(3D)身上,则使用3D摄像机; foreach (Transform rc in all) { rc.gameObject.layer = LayerMask.NameToLayer("Tip"); //指定Layer } model.transform.SetParent(transform); model.transform.position = trgPos; model.transform.rotation = Quaternion.identity; model.transform.localScale = new Vector3(1, 1, 1); } } }