このブログは「ファイブボックス一分間Unity講座」の補足説明となる記事です。主にUnityに初めて触れる方や初心者向けの講座になります。
Unityを自由に使いこなせるようになっている方にとっても、ちょっとお役に立つ情報を掲載していますので、もしよければご参照ください。
今回の課題は前回の作品「1分間 Unity講座 AnimationとRigidbody の機能を使って、キャラクターを前進させる方法」の続きになります。今回からご参照頂く場合は、先にRigidbodyとAnimator各コンポーネントの変数を取得しておいてください。本文の冒頭に前回までのコードを記載しておきますので、そちらをご参照ください。
今回はWキーを押したときに Rigidbody を使って Unity-Chan を前進させる動きの中で、左シフトキーを押すことで加速、一定の速度を超えたところで走り出すアニメーションを実現してみます。
下の動画は「一分間Unity講座 Flort型のParameterを使ってAnimationを遷移させる方法」 のショート動画です。ご興味がございましたら、こちらの動画もご参照ください!
1,前回までのコード
まずは前回までのコードをご確認ください。
float speed; //float型の変数 speed を宣言
Animator animator; //Animator型の変数を宣言(記述済み)
Rigidbody rb; //Rigidbody型の変数(記述済み)
void Start()
{
rb = GetComponent<Rigidbody>(); //Rigidbodyを取得(記述済み)
animator = GetComponent<Animator>(); //初期値を取得(記述済み)
speed = 100f; //初期値に100を代入
}
void Update()
{
if (!Input.anyKey) //何も押されていなければ
{
//歩くアニメーションを停止(待機アニメーション)
animator.SetBool("IsWalk", false);
rb.velocity = Vector3.zero; //移動を停止
}
if (Input.GetKey(KeyCode.W)) //Wキーが押されたら
{
animator.SetBool("IsWalk", true); //歩くアニメーション発動
rb.velocity = transform.forward * speed * Time.deltaTime; //前進
}
//上矢印キーが押されたとき
if (Input.GetKeyDown(KeyCode.UpArrow) && jumpCount <= 1)
{
//Rigidbodyに上方向にJumpPowerの力を加える
rb.AddForce(transform.up * jumpPower);
if (jumpCount == 0) //初回ジャンプなら
{
animator.SetTrigger("Jump1Trigger"); //初回ジャンプアニメに遷移
}
else //そうでなければ
{
animator.SetTrigger("Jump2Trigger"); //2段ジャンプアニメに遷移
}
jumpCount++;
}
}
void OnCollisionEnter(Collision collision) //当たり判定
{
if (collision.gameObject.name == "Plane") //当たった相手が地面なら
{
jumpCount = 0; //JumpCount をリセット
}
}
AnimatorController の設定は過去の動画をご参照ください
■ ジャンプのアニメーション
■ 歩くアニメーション
2,走るアニメーションの用意
続いて歩くアニメーションから走るアニメーションに遷移する AnimationController を作成します。
❶,Unitychan の走るアニメーション「Run00_F」のAnimationClip を取得し配置します。
❷,「RUN_00F」⇔「WALK00_F」往復のTransitionを作成します。
❸,Float型(小数点型)のParameter、RunValue を作成します。名前は任意です。
❹,Inspectorで作成したTransitionに条件を指定します。
■「WALK00_F」⇒「RUN_00F」
Conditionsで RunValue を指定し、Greater(より大きい)、値を300に指定
■「RUN_00F」⇒「WALK00_F」
Conditionsで RunValue を指定し、Less(未満)、値を300に指定
これでAnimatorController の設定は完成です。
3,走るアニメーションへの遷移プログラム
作成済みのコードに以下のコードを追記します。変更するのはUpdate関数のみです。
void Update()
{
//speedの値に応じ走る⇔歩くを振り分け遷移
animator.SetFloat("RunValue", speed);
if (!Input.anyKey) //何も押されていなければ
{
animator.SetBool("IsWalk", false);
rb.velocity = Vector3.zero;
speed = 100; //何も押されてい開ければSpeedを100にリセット
}
if (Input.GetKey(KeyCode.W)) //Wキーが押されたら
{
animator.SetBool("IsWalk", true);
rb.velocity = transform.forward * speed * Time.deltaTime;
//Wキーが押されている間、速度が1000未満で左シフトが押されたなら
if (Input.GetKey(KeyCode.LeftShift) && speed < 1000)
{
speed += 0.5f; //speedを0.5ずつ加速
}
else if (speed > 100) //そうでなく、speed が100より大きければ
{
speed--; //speed を1ずつ減産
}
}
//上矢印キーが押されたとき
以下記述済み
}
これで「Wキー」を押して前進している間に、「左シフトキー」が押されるとどんどん移動速度が大きくなっていき、300を超えたタイミングで走り出す動きができました。
「左シフトキー」を離すと徐々に移動速度が遅くなり、300より小さく成ったタイミングで歩き出すはずです。
今回の解説はここまで。
ファイブボックスでは、Unityの個別指導のオンラインレッスンを行っています。
ご興味のある方は当サイト、オンラインレッスンから、無料体験授業へお問い合わせ下さい。
コメント