前提・実現したいこと
UnityではスタンダードアセットのThirdPersonUserControlを3Dモデルにアタッチすることで移動やジャンプができるようになりますよね。
そこで質問なのですが、このスクリプトではジャンプ中に移動をすることができません。(ジャンプ中は矢印キーが効かない)
なので、これを書き換えて、ジャンプ中でも移動できるようにしたいです。(3Dマリオのような感じで、ジャンプ中でも方向移動ができるようにしたいです)Webサイトで調べても出てこず困っています。方法を教えてください。
試したこと
接地判定に関わっていそうな箇所を消したりしてみたのですが、うまくいきませんでした。
スクリプトはアセットストアから無料で入手できる、スタンダードアセットに入っているThirdPersonUserControlとThirdPersonCharacterというスクリプトです。全文は字数の関係で載せられませんでしたが、以下、ThirdPersonCharacter
スクリプトの一部を載せておきます。このあたりが怪しいと思うのですが。。。
C#
1 void HandleGroundedMovement(bool crouch, bool jump) 2 { 3 // check whether conditions are right to allow a jump: 4 if (jump && !crouch && m_Animator.GetCurrentAnimatorStateInfo(0).IsName("Grounded")) 5 { 6 // jump! 7 m_Rigidbody.velocity = new Vector3(m_Rigidbody.velocity.x, m_JumpPower, m_Rigidbody.velocity.z); 8 m_IsGrounded = false; 9 m_Animator.applyRootMotion = false; 10 m_GroundCheckDistance = 0.1f; 11 } 12 } 13 14 public void OnAnimatorMove() 15 { 16 // we implement this function to override the default root motion. 17 // this allows us to modify the positional speed before it's applied. 18 //条件無くすとジャンプ中止まる 19 if (m_IsGrounded && Time.deltaTime > 0) 20 { 21 //移動するのに必要な部分!! 22 Vector3 v = (m_Animator.deltaPosition * m_MoveSpeedMultiplier) / Time.deltaTime; 23 24 //we preserve the existing y part of the current velocity. 25 v.y = m_Rigidbody.velocity.y; 26 m_Rigidbody.velocity = v; 27 } 28 }
スタンダードアセットの該当するスクリプトがアニメーションでキャラクターを動かしているのか、アニメーションで動かしているのかをまず調べて質問した方が、回答を得やすいです。(回答者側が調べる手間が減るため。)
また、ジャンプ中にどのように移動したいのかも漠然としています。
移動とジャンプを合わせるという記述から、ジャンプ中にも地上と全く同じように
前後左右に移動すると推測できますが、確信が持てません。
以上2点を追記されることをお勧めします。
アニメーションでキャラクターを動かしているのか、アニメーションで動かしているのかとはどういうことでしょうか。ジャンプ中の移動に関しては、仰るとおりジャンプ中の前後左右の移動のことです。
すみません、私の方で記載に誤りがありました。
正しくは「アニメーションでキャラクターを動かしているのか、物理演算で動かしているのか」です。
ただ、こちらに関してはスクリプトを記載されたことで解決しているので、追記の必要はありません。
また、複数のユーザーが「やってほしいことだけを記載した丸投げの質問」という評価を下したようです。私もそれについては同感で、そう感じる原因は「何も考えてないように見えるから」だと思います。
以下、そう見えないようにする解決策です。
・自分で、ジャンプ中に移動処理をやる方法を考えてみる
→何1つ案が浮かばなかったら、知識不足です。
Unityがどのようにキャラクターを移動させているのかの知識を検索したり、当該スクリプトを読んで確認しましょう。
・知識はあるのに、スクリプトが読めない
→スクリプトの中で、どうしても分からない処理があり、検索しても出てこない場合は再度質問しましょう。
・接地判定を消してもうまく行きませんでした
→接地判定は本当に消えているのか、デバッグした結果を添付しましょう
「ジャンプ中に移動させる」のような内容を検索しても、具体的すぎて検索できません。仮に、この方法でしか検索・質問できないようであれば、永遠に分からない処理を人に聞くことでしか解決できなくなってしまいます。再度上記事項を追記願います。
あなたの回答
tips
プレビュー