Unityで揺れものを揺らす

Unityはモーションを使いまわせるようになってますが、キャラ固有の髪の毛だったりアクセサリーだったりは揺れてくれません
一応Spring JointとかConfigurable Jointとか用意されているけどびよんびよんしちゃってなんかコレジャナイ・・・
ほんとは3Dソフトでベイクしちゃうのが一番なんでしょうけど面倒です。
ということで昔ICEでつくったやつをそのままUnityに移植してみました。

Unityちゃんの髪の毛をリアルタイムで揺らすDemo
左上のトグルボタンで風が吹きます。
WebPlayer
サンプルシーン
スクリプトのみ


なんとなくそれっぽいものが出来ましたが、結局セットアップが面倒なものになってしまいました。

まずUnityちゃんの場合はもともと髪の毛にアニメーションが入っているため、インポートの設定から髪の毛のボーンのアニメーションをマスクして消します。
import_setting
UnityちゃんのFBXは複数選択するとUnityが必ず落ちるんですけどうちだけですかね

そしたら揺らしたいボーンにSpringBoneをアタッチして、BoneAxisにボーンの向いている方向と、Childに次のボーンをいれます。
import_setting
Unityちゃんの場合-Xが次のボーンの方へ向いているのでXに-1を入れます。
ボーンが末端の場合は空のGameObjectをそのボーンの子にしといてください。

最後にSpringManagerを適当なGameObjectにアタッチして、配列SpringBonesにSpringBoneがアタッチされているオブジェクトを“親から順”に入れていきます。
なんでこんな面倒なことになってるかというと、スクリプトの実行順が親からとは限らないみたいで、子から実行されてしまうとおかしなことになるからです。
ここはもっとうまいやり方があるかも・・・
これでとりあえずこれで揺れます。

衝突判定をしたい場合、まずSpringColliderというスクリプトをGameObjectにつけて配置してください。
そしたらSpringBoneにSpringColliderを入れる配列があるので、そこに判定したいオブジェクトだけ入れてください。
球と球の簡単な衝突判定ですが一応それっぽく動きます。
本当はPhysXの機能を使いたかったんですが、衝突判定がイベントでしか取れなかったので自作してみました。
もしかしたら標準機能でできるかも

なんかおかしなところとか、改善できるところがあったら教えて下さい。

Unityで揺れものを揺らす” への6件のフィードバック

  1. ユニティちゃんのPDFに説明書の不備というか、末端の指定がどうすればいいのか書かれていないので、
    こちらを探してきました。

    重力方向、強さを指定して、垂らせるようになったら、より強力になるじゃないかと思いました。

コメントを残す

メールアドレスが公開されることはありません。