void UpdateStep1() { float percent = m_has_anim_time / m_up_fly_anim_interval; if (m_has_anim_time >= m_up_fly_anim_interval) { percent = 1; m_has_anim_time = 0; m_anim_step = FightWordAnimStep.Step2; } float scale = percent * (m_up_fly_end_scale - m_up_fly_start_scale) + m_up_fly_start_scale; transform.localScale = Vector3.one * scale; Camera main_camera = xc.ui.ugui.UIMainCtrl.MainCam; if (main_camera == null) { return; } Vector3 cur_screen_pos = (m_up_fly_dest_screen_pos - m_src_screen_pos) * percent + m_src_screen_pos; // cur_screen_pos.x = cur_screen_pos.x + m_screen_abs_offset.x; // cur_screen_pos.y = cur_screen_pos.y + m_screen_abs_offset.y; Vector3 cur_world_pos = main_camera.ScreenToWorldPoint(cur_screen_pos); cur_world_pos.z = 0; transform.position = cur_world_pos; transform.localPosition = new Vector3(transform.localPosition.x, transform.localPosition.y, 0); }
void UpdateStep3() { float percent = m_has_anim_time / m_step3_anim_interval; if (m_has_anim_time >= m_step3_anim_interval) { percent = 1; m_has_anim_time = 0; m_anim_step = FightWordAnimStep.End; } Camera main_camera = xc.ui.ugui.UIMainCtrl.MainCam; if (main_camera == null) { return; } Vector3 cur_screen_pos = (m_step3_dest_screen_pos - m_up_fly_dest_screen_pos) * percent + m_up_fly_dest_screen_pos; // cur_screen_pos.x = cur_screen_pos.x + m_screen_abs_offset.x; // cur_screen_pos.y = cur_screen_pos.y + m_screen_abs_offset.y; Vector3 cur_world_pos = main_camera.ScreenToWorldPoint(cur_screen_pos); cur_world_pos.z = 0; transform.position = cur_world_pos; transform.localPosition = new Vector3(transform.localPosition.x, transform.localPosition.y, 0); if (m_canvasGroup != null) { for (int index = 0; index < m_canvasGroup.Length; ++index) { m_canvasGroup[index].alpha = 1 - percent; } } }
void UpdateStep2() { float percent = m_has_anim_time / m_stay_anim_interval; if (m_has_anim_time >= m_stay_anim_interval) { percent = 1; m_has_anim_time = 0; m_anim_step = FightWordAnimStep.Step3; } float scale = percent * (m_stay_end_scale - m_up_fly_end_scale) + m_up_fly_end_scale; transform.localScale = Vector3.one * scale; }
/// <summary> /// /// </summary> /// <param name="displayTimeScale"></param> /// <param name="start_worldPosInScene">首次出现的起始点世界位置</param> /// <param name="attacker_world_pos">攻击者位置</param> /// <param name="defender_world_pos">防御者位置(飘字的人)</param> /// <param name="effect_type"></param> /// <param name="screen_abs_offset">屏幕坐标绝对偏移值(所有屏幕位置都受这个绝对值影响)</param> public void Show(float displayTimeScale, Vector3 start_worldPosInScene, Vector3 attacker_world_pos, Vector3 defender_world_pos, xc.FightEffectHelp.FightEffectType effect_type, Vector2 screen_abs_offset) { m_screen_abs_offset = screen_abs_offset; //displayTimeScale = displayTimeScale * 10; m_has_anim_time = 0; m_anim_step = FightWordAnimStep.Step1; Camera mainCamera = xc.Game.Instance.MainCamera; if (mainCamera == null) { return; } switch (effect_type) { case xc.FightEffectHelp.FightEffectType.CriticEnemyDamage: case xc.FightEffectHelp.FightEffectType.CriticAttendantDamage: { m_up_fly_anim_interval = 0.2f * displayTimeScale; Vector3 up_fly_dest_world_pos = start_worldPosInScene + (defender_world_pos - attacker_world_pos).normalized * 0.3f + new Vector3(0, 0.5f, 0); m_up_fly_dest_screen_pos = mainCamera.WorldToScreenPoint(up_fly_dest_world_pos); m_up_fly_start_scale = 0.3f; m_up_fly_end_scale = 1.2f; //第二步:然后静帧0.2s,并快速变回1X大小 m_stay_anim_interval = 0.2f * displayTimeScale; m_stay_end_scale = 1f; //第三步:最背后继续朝反向上方飘0.5s后并渐隐消失 m_step3_anim_interval = 0.5f * displayTimeScale; Vector3 step3_dest_world_pos = start_worldPosInScene + (defender_world_pos - attacker_world_pos).normalized * 1.8f + new Vector3(0, 1f, 0); m_step3_dest_screen_pos = mainCamera.WorldToScreenPoint(step3_dest_world_pos); } break; case xc.FightEffectHelp.FightEffectType.EnemyDamage: case xc.FightEffectHelp.FightEffectType.Attendant_damage: default: { m_up_fly_anim_interval = 0.3f * displayTimeScale; Vector3 up_fly_dest_world_pos = start_worldPosInScene + (defender_world_pos - attacker_world_pos).normalized * 0.3f + new Vector3(0, 0.5f, 0); m_up_fly_dest_screen_pos = mainCamera.WorldToScreenPoint(up_fly_dest_world_pos); m_up_fly_start_scale = 0.5f; m_up_fly_end_scale = 1.2f; //第二步:然后静帧0.1s,并快速变回1X大小 m_stay_anim_interval = 0.1f * displayTimeScale; m_stay_end_scale = 1f; //第三步:最背后继续朝反向上方飘0.5s后并渐隐消失 m_step3_anim_interval = 0.5f * displayTimeScale; Vector3 step3_dest_world_pos = start_worldPosInScene + (defender_world_pos - attacker_world_pos).normalized * 1.8f + new Vector3(0, 0.8f, 0); m_step3_dest_screen_pos = mainCamera.WorldToScreenPoint(step3_dest_world_pos); } break; } m_up_fly_dest_screen_pos.x = m_up_fly_dest_screen_pos.x + m_screen_abs_offset.x; m_up_fly_dest_screen_pos.y = m_up_fly_dest_screen_pos.y + m_screen_abs_offset.y; m_step3_dest_screen_pos.x = m_step3_dest_screen_pos.x + m_screen_abs_offset.x; m_step3_dest_screen_pos.y = m_step3_dest_screen_pos.y + m_screen_abs_offset.y; Vector3 src_world_pos_in_MainCam = transform.position; m_src_screen_pos = xc.ui.ugui.UIMainCtrl.MainCam.WorldToScreenPoint(src_world_pos_in_MainCam); m_effect_type = effect_type; }