質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

ただいまの
回答率

88.04%

ジャンプが一瞬で終わってしまう。

受付中

回答 2

投稿 編集

  • 評価
  • クリップ 0
  • VIEW 2,738

score 26

すみません、質問させてください。

ある3Dキャラをジャンプさせようと思います。
それで以下のスクリプトを書きました。

void Update () {

        //回転と移動
        Vector3 direction = new Vector3(Input.GetAxis("Horizontal"), 0, 0);
        if (direction.sqrMagnitude > 0.01f) {
            Vector3 forward = Vector3.Slerp(
                transform.forward, direction, rotationSpeed * Time.deltaTime / Vector3.Angle(transform.forward, direction));
            transform.LookAt(transform.position + forward);
        }
        characterController.Move(direction * Speed * Time.deltaTime);

        //移動アニメ
        if (Input.GetAxis("Horizontal")!=0)
        {
            anim.SetBool("Run", true);
            Debug.Log("移動してるよ");
        }   
        else if (Input.GetAxis("Horizontal") == 0)
        {
            anim.SetBool("Run", false);
            Debug.Log("移動してないよ");
        }
            //攻撃アニメ
            if (Input.GetKeyDown(KeyCode.Space) )
            {
                anim.SetBool("Attack", true);
                Debug.Log("攻撃したよ");
            }
            else 
            {
                anim.SetBool("Attack", false);
                Debug.Log("攻撃終わったよ");
            }
        //Jump
        if (Input.GetKeyDown(KeyCode.UpArrow))
        {
            Debug.Log("じゃんぷしたよ");
            anim.SetBool("Jump", true);
        }
        else
        {
            anim.SetBool("Jump", false);
            Debug.Log("じゃんぷ終わったよ");
        }

    }


攻撃はうまくできるのですが、Jumpの入力をした際、
アニメーションが一瞬で終わってしまい、ひざがカクってするだけです。
もう少しモーションの発生時間を長くできれば状況が改善すると思うのですが、
どのようにすれば良いのでしょうか?
よろしくおねがいします。
**以下追記

メカニム
メカニムの設定を無理やりいじったら多少改善しました。
何故かジャンプがスローモーションになりますが・・・

  • 気になる質問をクリップする

    クリップした質問は、後からいつでもマイページで確認できます。

    またクリップした質問に回答があった際、通知やメールを受け取ることができます。

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 過去に投稿した質問と同じ内容の質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

回答 2

+1

コードを見る限り、Inputの使い方に懸念が見られます。
ジャンプ及び攻撃の入力判断に使用しているInput.GetKeyDown()は押した瞬間を判断する関数です。
その関数のifelseで判断しているため、キーを押してanim.SetBool( "Jump", true );が呼ばれたとしても、翌フレームにはすぐにanim.SetBool( "Jump", false );が呼ばれてしまうため、Jumpステートに入ったらすぐにアニメーションが終わってしまうのではないでしょうか。
mugicyaさんの回答にもあるように少し作りを変える必要があると思いますよ。

その点を確認してみてください。

これは少し余談ですが、アニメーションの遷移情報にHasExitTimeというものがあります。
イメージ説明
これをONにしていると、そのステートのアニメーションが終了しないとステートの遷移が始まらないようになります。
状況次第で使ってみるのもありかもしれません。
アニメーション遷移

HasExitTimeなし
イメージ説明

HasExitTimeあり
イメージ説明

ご参考になればと思います。

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2016/07/29 10:51

    回答ありがとうございます。まずは、HasExitTimeの機能を確認してみようと思います。そのうえで、お二方のご指摘の通り、違った作り(とりあえず簡素な作りの格闘ゲームもしくはアクションゲームのキャラクターのスクリプトを探して、学習する。)を検討してみようと思います。
    危うく迷走するところでした。ありがとうございました。

    キャンセル

0

このノリで作っていったら、すごく面倒な事になりそうなので、格闘ゲームなどのプレイヤーの作り方を書きます。
あくまで、僕のやり方ですが。

プレイヤーキャラの基本姿勢に必ず戻るような処理を書く。

格闘ゲームなら、フットワークのようなモーションが基本姿勢だと思うのですが、
移動、攻撃、防御、何をしても基本的にフットワークに戻る。
フットワークの処理の場所でいろいろ判断して処理させます。

パッと見た感じ、ジャンプした瞬間、ほかの処理に邪魔されて戻っているだけだと思います。
ただ、if で分岐していては、どんだけややこしくなるか…。
この程度の不具合で「?」となっている状態では、この先破たんするのは目に見えている気がしませんか?

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2016/07/29 04:01

    回答ありがとうございます。
    質問内容を追記しました。
    一応、メカニムは、Idleに戻るようにしているのですが。。。
    格闘ゲームのキャラをちょっと探してみます。

    キャンセル

15分調べてもわからないことは、teratailで質問しよう!

  • ただいまの回答率 88.04%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

関連した質問

同じタグがついた質問を見る