Beispiel #1
0
 /// <summary>
 /// プル開始
 /// </summary>
 public void BeginPull(MDPlayer player)
 {
     if (m_State == State.None)
     {
         m_State = State.Pull;
         StartCoroutine(m_PlayingCoroutine = Pulling(player));
     }
 }
Beispiel #2
0
    /// <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;
    }