search
LoginSignup
27

More than 1 year has passed since last update.

posted at

updated at

Organization

UnityでVRMデータに自動的にコライダーを生成する

自己紹介

こんにちはゆずです。@Yuzu_Unity

はじめに

VRMにはコライダーを保存する機能がないため
3Dゲームで使おうとすると当たり判定が取れません。
せっかくの統一フォーマットなので自動でコライダーを割り当てるものを作成しました。(ランタイム)
VRMを用いたオンラインFPSゲームを作成しようかと…
※メッシュデータを読み込んでいないので、かなりあいまいな実装です。
あくまでも、とりあえず使えればいいというレベルのものです。
SAColliderBuilderレベルの精度は出ません
image.png

実装内容

VRMファイルはHumanoid形式であるので
各HumanoidのボーンのTrasnformを取得できます。
image.png
HumanBodyBones
Animator.GetBoneTransform

この各ボーンのTransformから体系等を推定し配置していきます。

基本的には
1. 各ボーンの親子の差のベクトル
2. 肩幅
3. 脚の付け根の左右の幅
の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つに分類され各コライダーに
レイヤー、タグを指定可能

実際の実行


image.png

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
What you can do with signing up
27