うにty生活

UnityChanを生活させたい

Unityちゃんの衝突判定検証 #2.1

 

今回は衝突判定について調査していきます!検証会ってことで2.1!

2022年1月に更新しました

 

Unitychanの歩かせ方いろいろ検証

 

作成条件

1,人として自然

2,壁を通り抜けない

3,階段を登れる

これらの条件満たすことのできる歩かせ方を検証していきます

 

検証してくれるUnityちゃんのそれぞれの特性をまとめました

 移動方法\コンポーネント ①RigidBody+Collider ②CharactorController
③RigidBody移動       使用不可
④transform移動    
⑤Move関数移動     使用不可  

 

各項目説明

コンポーネント:キャラクターが持つコンポーネント

①RigidBody+Colliderのキャラクター

②CharctorControllerのキャラクター

 

移動方法:スクリプトで制御する移動方法

ソース内容については次回記事で取り扱います、

Unityちゃんを実際に歩かせてみる 後編 #3 - うにty生活

とりあえずどういう移動方法が良いかだけ考えていきます

③どの方向にもそちらを向いて歩くスクリプト(RigidBody移動)

④ 歩き方は人間ぽいが後ろだけムーンウォークするスクリプト(transform移動)

⑤ 2をベースにMove関数で動かすスクリプト(Move関数)

  

比較

長いので項目1は「C」、項目2は「S」でそのあとに番号をつけて省略します

例:C1/S2

→RigidBody+Colliderコンポーネントのtransform移動方式といった感じ

 

・① と③

RigidBodyに力を加えて動かす方法

重力も働いていて衝突判定もある(Collider)が階段が登れない

Rayを飛ばして傾斜を計算して登る方法もありますが、処理が重たいし、数学が弱いため却下

 

・① と ④ (候補1)

C1/S1と比べて階段が登れる

違いはtransform移動するためだと考えられる。

 

・① と ⑤

charctorcontrollerでないため使えない

 

 ・② と ③

RigidBodyがないため使えない

 

・② と ④

OnTriggerEnterで衝突判定可能

処理を別に記述しなければ壁を通り抜けてしまう、階段も登れない

そして他のオブジェクト全てisTriggerをonにしなければいけないため面倒

 

・② と ⑤ (候補2)

Move関数で動かすとOnControllerColliderHitの方で検出可能、そして何もしなくとも壁をすり抜けない

重力を無理やりつけているため少し動作が重たく、横回転するのが遅い

 

「①/④」と「②/⑤」はこれでほぼ同等の動きができるようになりました。

 

 

 

実際の動作を比較

 わかりやすいように3人のUnityChanにテストランウェイを通ってもらいました笑

横から見るとこんな感じ。

f:id:tubakihimeLoveHate:20180522134437p:plain

階段で壁抜けと階段登り二つを同時に検証します。

 

余談ですがProBilderが使えるようになるまで自分はこのような階段はCubeを重ねて自分で作っていました・・・

ProBilder素晴らしい!

 

何はともあれミスUnityChanグランプリの開催です!

 

左(候補2):CharctorController+Move関数(OnControllerColliderHit関数で衝突検知)

中央(候補1):RigidBody+Collider +transform移動

右:CharctorController + transform移動(OnTriggerEnterで衝突検知)

f:id:tubakihimeLoveHate:20180521155825g:plain

 右は比較のために追加しました

 

ミスUnityChanグランプリ結果発表

左(候補2)と中央(候補1)のUnityちゃんには審査員さんも困った顔をしています

二人とも条件の、「壁抜けしないこと」、「階段が登れる」はクリアです

 

最後の「自然に見えるか」という条件ですが左は階段を上るスピードと床を歩くスピードが一緒、普通階段では遅くなりますので中央のUnityちゃんが自然に見えます。

 

そして無理な重力がかかっていないため向き変えも軽いです。

また、RigidBodyの処理の方が軽いということで

この家で生活してもらうUnityちゃんはRigidBody+Collider+transform移動のUnityちゃんに決定です!(パチパチ)

 

ただ左のUnityちゃんもHit関数に処理を追加すれば、階段の時だけスピードを下げることや

なんのオブジェクトとも衝突してない時だけ重力をかけるなど工夫をすれば使えるため

左のUnityちゃんは補欠として中央Unityちゃんに出来ない場面があった時に活躍してもらおうと思います(^^)

 

まだまだこれからだ、うにty生活