自己紹介
こんにちはゆずです。@Yuzu_Unity
はじめに
VRMにはコライダーを保存する機能がないため
3Dゲームで使おうとすると当たり判定が取れません。
せっかくの統一フォーマットなので自動でコライダーを割り当てるものを作成しました。(ランタイム)
VRMを用いたオンラインFPSゲームを作成しようかと…
※メッシュデータを読み込んでいないので、かなりあいまいな実装です。
あくまでも、とりあえず使えればいいというレベルのものです。
SAColliderBuilderレベルの精度は出ません
実装内容
VRMファイルはHumanoid形式であるので
各HumanoidのボーンのTrasnformを取得できます。
HumanBodyBones
Animator.GetBoneTransform
この各ボーンのTransformから体系等を推定し配置していきます。
基本的には
- 各ボーンの親子の差のベクトル
- 肩幅
- 脚の付け根の左右の幅
の3つのデータから推定しコライダーを配置します。
(これしかない…)
データ公開(ライセンスはフリーです。)
UnityPackage
https://github.com/yuzu-unity/HumanoidCollider/raw/master/HumanoidCollider.unitypackage
使い方
AnimatorがついているオブジェクトにHumanoidColliderBuilderをAddComponentして
public void SetCollider()を実行します。
Debug用のbool isSetをInspectorで押すだけでも可
現状の機能
頭のサイズは肩幅より推定
腕、脚のサイズは脚の付け根の左右の幅から推定
しているので、特に頭のサイズはおかしくなることがあります(等身がわからないので)
UpperChest等必須ボーンがない時にも対応
Head,Body,Arm,Legの4つに分類され各コライダーに
レイヤー、タグを指定可能
実際の実行
test pic.twitter.com/qwwfEQf377
— ゆず (@Yuzu_Unity) 2019年6月22日