Unityちゃんが画面端で動かなくなる現象の対策について

いや~ここまで順調に進んでいたと思っていたら、思わぬ落とし穴が待っていました。

まぁエラーが対峙することなんてプログラミングの世界においては日常茶飯事なんでしょうけどね。

スポンサーリンク

Unityちゃんが画面端に行くと操作が効かなくなる現象の対処

どういう事かよく分からないと思うので、gifアニメーションで見てみましょう。

Unityちゃんが画面端で動かなくなる

こんな状態です。画面端で宙に浮いてしまい動けなくなってしまいます。ジャンプも反応しない状態ですね。

ただし、固まる条件があって、ゆっくりと画面端に進んだ時に固まるようです。

スピードを上げて駆け抜けようとするとちゃんと下に落下するんです。

一応矢印キーでぐるぐるとその場で回転だけはするんですけどね・・・。これは流石に放っておくわけにはいかないバグですね。

直そうと意気込んでいたんですけど、結論から言うと原因が特定できませんでした。

結構な時間を使って色々試行錯誤してたんですけど、中々解消されなかったので、自分でUnityちゃんを動かすスクリプトを作った方が早いと思いました。

というわけで、同じような現象に困っている人は参考にしてもらえればと思います。

SDUnityちゃんをスクリプトを使って動かす(スマホ対応)

最終的にスマホに対応させる必要もあるので、スタンダードアセットのジョイスティックも実装したと思います。

まずは、Unityちゃんに「Rigidbody」と「Capsule Collider」をアタッチします。

SD版UnityちゃんにRigidbodyとColliderをアタッチ

上の画像のように設定します。

「Standard Assets」をインポートしてシーンビューに配置

なんだかんだスタンダードアセットって必需品なんですよね。

今回は、スタンダードアセットに付属している「CrossPlatformInput」を利用するのでアセットストアからダウンロードしてインポートしましょう。

スマホで操作するために必要になるジョイスティックですね。

インポートしたら「Standard Assets」→「CrossPlatformInput」→「MobileSIngleStickControl」をシーンビューにドラッグ&ドロップ。

スクリプトを作成する

次に、スクリプトを作ります。

流石に長いので、Gistを使って表示しています。

作成したスクリプトをSD版Unityちゃんにアタッチします。

Unityちゃんのアニメーションを実装する

このままだと、アニメーションが発生しないので、プロジェクトウィンドウから「Create」→「Animator Contoroller」でアニメーションコントローラーを作成。

コントローラー名は「Unitychanmove」にします。

作成したコントローラーをダブルクリックしてアニメーションウィンドウを開きます。

SD版Unityちゃんのアニメーター

ウィンドウ内で右クリックして「Create State」→「Empty」で「Idle」「Run」「Jump」をそれぞれ作成します。

SD版Unityちゃんにモーションの設定

待機状態になる「Idle」には「Standing@loop」のモーションを設定します。

同一名モーションの違い

この時、同じ名前のモーションが2つあると思いますが、下の方にある「humanoid.fbx」の方を選ぶようにしましょう。

同じように「Run」には「Running@loop」を「Jump」には「Jumping@loop」を設定。

次に状態遷移の設定です。

「Idle」を右クリックして「Make Transition」を選択。この状態で「Run」をクリックして状態遷移の矢印を繋ぎましょう。

同じような作業を行い、全て行き来できるようにします。

アニメーションの条件分岐

状態遷移するための条件を付加します。

Parametersの右下にある「+」ボタンを開いて「Bool」を選択し「Running」と入力します。

同様に「Jumping」と「Idle」も「Bool」で作成します。

ジャンプするアニメーションの設定

「Idle」から「Jump」に進む矢印をクリックして「Has Exit Time」のチェックを外します。

Conditionsの右下にある「+」を開いて「Jumping」を選択して「true」にします。

同様の設定を全ての矢印にて行います。

アニメーションコントローラーをセットする

ここまで出来たらUnityちゃんを選択して「Unitychanmove」をセットします。

SD版Unityちゃんがジョイスティックで動く様子

ジョイスティックでSD版Unityちゃんを操作できるようになります。

尚、画面端に進んでもフリーズすることはなくなりました。良かった良かった。

ジョイスティックの可動範囲を設定

デフォルトだとジョイスティックの動く範囲が大きすぎるので、MobileJoystickにある「Movement Range」を30まで下げました。30だと上のアニメーションぐらいの挙動になりますね。

とりあえず画面端で動けなくなるバグを解消できたので、次回から本編に戻りますね。