1

私は C# を使用しており、現在 3 人称視点のゲームを構築しています。フレーム内のアニメーションを含む 3D キャラクター モデルがあるため、フレームごとにアニメーションをカットする必要があります。

問題は、現在 5 つのアニメーション (アイドル、実行、歩行、パンチ、ジャンプ) があり、これが私のコードです。

void Update () {
    if (Input.GetAxis("Horizontal") != 0 || Input.GetAxis("Vertical") != 0){
        //play run animation
    } else {
        if (motion.x != 0 || motion.z != 0){
            motion.x = 0;
            motion.z = 0;
        }
                    //play idle anim
    }

    if (Input.GetKeyDown(KeyCode.Space) && controller.isGrounded){
    //play jump anim
    }

    if (Input.GetKeyDown(KeyCode.P)){
        //play punch anim
    }

    if (!controller.isGrounded){
        //play jump anim
    }

    vertVelo -= gravity * Time.deltaTime;
    motion.y = vertVelo;
    this.controller.Move(motion * Time.deltaTime);
}

Pを押して文字をパンチすると問題が発生します。update関数のアイドルアニメーションが呼び出されて、パンチアニメーションが再生されていないようです。

それで、解決策は何ですか?アニメーション管理技術はありますか、それとも遅延を使用する必要がありますか?

4

2 に答える 2

1

パンチの再生中にアイドル アニメーションをブロックできます (ただし、最善の方法ではない可能性があります)。

bool isPunchPlaying = false;

void Update () {
    //... 
    if (!isPunchPlaying) {
        // Play idle anim
    }
    // ...
    if (Input.GetKeyDown(KeyCode.P)){
        //play punch anim
        isPunchPlaying = true;
        StartCoroutine(WaitThenDoPunch(animation["punch"].length));
    }
    // ...
}

IEnumerator WaitThenDoPunch(float time) {
    yield return new WaitForSeconds(time);
    isPunchPlaying = false;
}
于 2013-02-16T11:57:38.200 に答える
0

Unityでアニメーションレイヤーをグーグルで検索し、アニメーションをブレンドしてみてください。

低いレイヤーをオーバーライドする高いレイヤー番号を持つレイヤーにアニメーションループを設定できます。

これは、たとえばレイヤー1でアイドルループを設定でき、これが継続的に再生されることを意味します。次に、ジャンプループがレイヤー2にあるとします。ジャンプロジックがジャンプループを起動すると、1回再生され、アイドルループが続行されます。

Unityの「AnimationState」に関するこのドキュメントも役立つ可能性があります>リンク<

于 2013-02-15T13:02:34.267 に答える