예제 #1
0
    void FixedUpdate()
    {
        var newPos    = transform.position;
        var newHeight = Mathf.Min(transform.position.y + reserveMoveHeight, heightLimit);
        var up        = newHeight > newPos.y;
        var down      = newHeight < newPos.y;

        reserveMoveHeight  = 0;
        newPos.y           = newHeight;
        newPos.x          += frontMoveSpeed * Time.fixedDeltaTime * 60;
        transform.position = newPos;

        // 地面に反射した反動や、ミサイルの反動で、物理挙動的に上向きや左向きに進んでいたら力を徐々に打ち消す
        // ミサイルに当たってしばらくは打ち消さない
        if (!hitMissile && (rigid.velocity.y > 0 || rigid.velocity.x < 0))
        {
            rigid.velocity *= 0.5f;
        }

        var ringSound = prevRingSoundTime + flyingSeInterval > Time.time;

        if (up)
        {
            pAnim.RisingAnim();
            if (ringSound)
            {
                audio.PlayOneShot(upClip);
                prevRingSoundTime = Time.time;
            }
        }
        else
        {
            pAnim.NormalAnim();
        }

        if (down)
        {
            if (ringSound)
            {
                audio.PlayOneShot(downClip);
                prevRingSoundTime = Time.time;
            }
        }
    }