public void Init(RoleBase creater, Vector3 tarVec, RoleBase tarRole) { m_Creater = creater; m_TarVec = tarVec; if (InputManager.instance.m_CurOpaMode == OperateMode.AutoFindEnemies || InputManager.instance.m_CurOpaMode == OperateMode.AutoFindEnemies_RollTarget_JS) { if (tarRole != null) { m_TarPos = tarRole.transform.position; // if (m_Creater is Hero) // Debug.Log("M_TarRole: " + tarRole.name); } else { float dis = creater.m_AtkRange; m_TarPos = transform.position + dis * m_TarVec.normalized; } } else if (InputManager.instance.m_CurOpaMode == OperateMode.ManualAtk || InputManager.instance.m_CurOpaMode == OperateMode.ManualAtk_AuxAim) { m_TarPos = (Vector3)m_Creater.GetCurFaceVec() + m_Creater.GetMidPos() + new Vector3(0, 0.4f, 0); } m_Player = Global.instance.m_Hero_01; m_StartPos = transform.position; m_EndPos = m_StartPos; m_Time = 0f; }
private void UpdateCurAtkTarMark(RoleBase tar) { if (m_CurTarMark == null) { return; } if (m_OpaMode == OperateMode.ManualAtk || m_OpaMode == OperateMode.ManualAtk_AuxAim) { m_CurTarMark.SetActive(false); return; } if (tar == null) { m_CurTarMark.SetActive(false); return; } // follow m_CurTarMark.SetActive(true); m_CurTarMark.transform.position = tar.GetMidPos(); }
void FixedUpdate() { m_Time += Time.deltaTime; switch (m_PlayType) { case EffectPlayType.Bezier: { if (Vector3.Distance(m_TarPos, transform.position) < m_MoveVec * Time.deltaTime) { if (!IsInvoking("DestroySelf")) { Invoke("DestroySelf", m_DestroyDelay); // enable damage Damage dmg = gameObject.GetComponent <Damage>(); if (dmg != null) { dmg.enabled = true; } // play the particle of explosion if (m_BezierEndParticle != null) { ParticleManager.instance.CreateParticle( m_BezierEndParticle, m_TarPos, Vector3.zero ); m_ParticleSystem.Stop(); AudioManager.instance.Play("Explosion_FireBall_01"); } } } // bezier Bezier myBezier = new Bezier(m_StartPos, new Vector3(0f, m_BezierCtrlHight, 0f), new Vector3(0f, m_BezierCtrlHight, 0f), m_TarPos); float allTime = Vector3.Distance(m_StartPos, m_TarPos) / m_MoveVec; float temp = Mathf.Clamp(m_Time / allTime, 0f, 1f); // pow 2 // temp = m_Time / (Mathf.Pow(allTime, 2)); // temp = Mathf.Pow(temp, 3); m_CurPos = myBezier.GetPointAtTime(temp); transform.position = m_CurPos; // rotate // transform.Rotate(new Vector3(0, 0, 1) * Time.deltaTime); } break; case EffectPlayType.Boomerang: { if (!IsInvoking("DestroySelf")) { Invoke("DestroySelf", m_DestroyDelay); // enable damage Damage dmg = gameObject.GetComponent <Damage>(); if (dmg != null) { dmg.enabled = true; } } if (Vector3.Distance(m_TarPos, transform.position) < m_MoveVec * Time.deltaTime) { temp_BoomerangTurnTarget = true; } if (Vector3.Distance(m_StartPos, transform.position) < Vector3.Distance(m_TarPos, transform.position) * 1.3 && temp_BoomerangTurnTarget == true) { if (m_Creater != null) { m_EndPos = m_Creater.GetFootPos(); } else { m_EndPos = m_StartPos; } temp_Move = false; } if (Vector3.Distance(m_EndPos, transform.position) < m_MoveVec * Time.deltaTime * 2 && temp_BoomerangTurnTarget == true) { Destroy(gameObject); } if (temp_Move) { BoomerangBezier(m_TarPos, m_EndPos); } if (!temp_Move) { ComeBakeMoveBack(); } } break; case EffectPlayType.Hold: case EffectPlayType.Charge: { // keep with creater if (m_Creater.m_CurStatus == RoleStatus.Die) { Destroy(gameObject); return; } transform.position = m_Creater.GetMidPos(); } break; default: break; } }