動く床に乗ったUnityちゃん(プレイヤー)を連動させる【Unity】

今回は、左右に移動する床にUnityちゃんが乗った際に、床の動きと連動する処理を加えていきます。

久々にこのプロジェクトを開いて遊んでいたんですが、Unityちゃんが床にジャンプした際の動きが明らかに不自然だったので、改善したいと思います。今更感満載ですけどね・・・。

スポンサーリンク

動く床に乗ったUnityちゃん(プレイヤー)を連動させる【Unity】

作業前の時点がこんな感じですね。

分かりやすいようにCubeを1つ横に配置していますが、Unityちゃんはその場にとどまっているように見えますね。

動画の途中で、Freeze Rotationの全てのチェックを外しています。そうすると、連動して動くようになりますが、Unityちゃんが倒れてしまってゲームとして成り立たないので、この方法はまずいです。

床を移動させるスクリプト

横移動している床は、このようなスクリプトにて動かしていましたね。ちなみに、RigidbodyのMovePositionを使っているのにもかかわらず、何故かUpdateメソッドになっていたのでFixedUpdateに修正しておきました。

ただ、今回はスクリプトからではなく、ステージを移動させるアニメーションを作成して対処するほうが簡単なのでこちらを起用します。

移動用のアニメーションを作成する

移動する床オブジェクトを選択して「Window」→「Animation」を選択します。

移動する床のアニメーション設定

アニメーションの対象は床のポジションなので、Add PropertyからTransformのPositionにある+ボタンをクリックします。

移動する床のアニメーションのフレーム

 

左上にある録画ボタンをクリックして、好きな位置にキーフレームを追加していきます。私の場合は、移動する前のスタート地点が「19」ですので、0フレーム目を19に設定します。

そこから30フレーム毎にキーフレームを作成して少しずつ動かしています。具体的な値は画像の通りです。キーフレームは、フレーム数が書かれている部分をクリックすると作成されます。

キーフレームを作成したら、インスペクターから好きなポジションの値を入力してください。

設定が完了したら、再び録画ボタンをクリックして、0フレーム目に戻しておきます。

この時点で、対象のオブジェクトには「Animator」がアタッチされているので、ゲームを実行して設定した通りに移動するか確認すると良いでしょう。

改善した床移動スクリプト

後は、床オブジェクトにアタッチしておいたスクリプトを修正します。

床はアニメーションによって移動させるので、SetParentを使ってプレイヤーを床の子オブジェクトに設定しましょう。

上手くいきましたね。プレイヤータグを使ってUnityちゃんが床に乗った時のみ、連動するようにしているので、Cubeは逆に静止するようになります。

タグの設定によって、連動の切り替えが出来るので、管理はしやすいと思います。

ただ、物理運動の影響を受けないので、最初の動画のように左右端に移動した際にCubeがバウンドしなくなるので、ゲームの仕様によって使い分ける必要はあると思います。