/// <summary> /// プル開始 /// </summary> public void BeginPull(MDPlayer player) { if (m_State == State.None) { m_State = State.Pull; StartCoroutine(m_PlayingCoroutine = Pulling(player)); } }
/// <summary> /// プル /// </summary> private IEnumerator Pulling(MDPlayer player) { m_MoveDir = Vector3.down; while (true) { float moveDelta = GameManager.TimeStep * MDGame.Config.DropPullSpeed; if (Vector3.Distance(player.transform.position, transform.position) > moveDelta) { // プレイヤーへのベクトル Vector3 dir = player.transform.position - transform.position; dir.z = 0; dir.Normalize(); // 回転角を算出 float angle = Mathf.Min(Vector3.Angle(m_MoveDir, dir), MDGame.Config.DropPullMaxAngle); // 今回の移動方向 m_MoveDir = (Quaternion.AngleAxis(angle, Vector3.Cross(m_MoveDir, dir)) * m_MoveDir).normalized; // 移動 transform.position += m_MoveDir * moveDelta; } else { transform.position = player.transform.position; break; } yield return(null); } m_SpriteRenderer.enabled = false; m_State = State.None; m_PlayingCoroutine = null; }