このブログは「ファイブボックス一分間Unity講座」の補足説明となる記事です。主にUnityに初めて触れる方や初心者向けの講座になります。
Unityを自由に使いこなせるようになっている方にとっても、ちょっとお役に立つ情報を掲載していますので、もしよければご参照ください。
作成中のプロジェクトの続きです。前回までの内容「1分間 Unity講座 3Dオブジェクトのジャンプ」をご参照頂き、Rigidbody型の変数、Animation型の変数を宣言、および取得しておいてください。
今回はWキーを押したときに Rigidbody を使って Unity-Chan を前進させ、なおかつ歩行のアニメーションを追加、Wキーを離したときに停止するという動きを作ってみます。
下の動画は「一分間Unity講座 AnimationとRigidbodyを使ってオブジェクトを前進させる方法」 のショート動画です。ご興味がございましたら、こちらの動画もご参照ください!
1,Animationの設定
1.1 AnimationClip の用意
Animator メニューを開いて作成中のUnity-ChanのAnimatorController を参照します。取得済みの素材から Unity-chan! Model ⇒ Art ⇒ Animations と辿り「unitychan-WALK00_F」という素材を展開、「WALK00_F」という名の AnimationClip を Animator にドラッグ&ドロップします。前方に歩くアニメーションクリップになります。
1.2 Transition の作成
事前に遷移の条件となる Parameter を用意します。
Bool型を選択し「IsWalk」という Parameter を作成します。
「WALK00_F」から「WAIT01」のTransitionを作成、Inspectorで次のプロパティを修正します。
・Has Exit Time ⇒ チェックを外し「false」の状態に指定
・Conditions ⇒ 作成したParameter「IsWalk」をセット、条件を「true」に指定
次の2つのClip間にも Transition を作成し、同様の設定を行います。
・「WALK00_F」⇒「WAIT00」
・「WALK00_F」⇒「WAIT02」
最後は歩行のアニメーションが終了したときのTransitionを作成します。終了後は「WAIT00」に戻りましょう。
Inspectorで次のように指定します。
・Has Exit Time ⇒ チェックを外し「false」の状態に指定
・Conditions ⇒ 作成したParameter「IsWalk」をセット、条件を「false」に指定
これでAnimatorの設定が完了しています。
2,移動とAnimationの遷移プログラム
2.1 変数の宣言
Unity-Chanには「PlayreController.cs」というスクリプトファイルを指定しています。このスクリプトファイルを開いて変数の宣言を行います。
float speed; //float型の変数 speed を宣言
Animator animator; //Animator型の変数を宣言(記述済み)
Rigidbody rb; //Rigidbody型の変数(記述済み)
void Start()
{
rb = GetComponent<Rigidbody>(); //Rigidbodyを取得(記述済み)
animator = GetComponent<Animator>(); //初期値を取得(記述済み)
speed = 100f; //初期値に100を代入
}
2.2 移動のプログラム
続いて Update関数内で移動とAnimationの遷移のプログラムを作成します。今回作るのは以下の内容です。
■ Wキーが押されたとき
歩くアニメーションに遷移
Rigidbodyで前進
■何も押されていないとき
アイドリングアニメーションに遷移
前向きの力と停止
ではスクリプトファイルに以下のコードを追記します。
void Update()
{
if (!Input.anyKey) //何も押されていなければ
{
animator.SetBool("IsWalk", false); //Idlingのアニメーションに遷移
rb.velocity = Vector3.zero; //Rigidbody のvelocity を停止
}
if (Input.GetKey(KeyCode.W))
{
animator.SetBool("IsWalk", true); //歩行のアニメーションに遷移
//Rigidbody のvelocityに前向きの力を加える
rb.velocity = transform.forward * speed * Time.deltaTime;
}
}
Bool型のパラメータを変更するには、Animator.SetBool("Parameter名",bool値)を使用します。
以前のブログで触れましたが、Time.deltaTime をかけることで、デバイス間の1フレームの時間の差による、移動速度のずれが解消されます。
これで正しく移動するプログラムができたと思います。
ファイブボックスでは、Unityの個別指導のオンラインレッスンを行っています。
ご興味のある方は当サイト、オンラインレッスンから、無料体験授業へお問い合わせ下さい。
Comments