うにty生活

UnityChanを生活させたい

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

 

今回は検証会ってことで2.1!

 

 

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

2つ項目を組み合わせて条件に沿うものを選んでいきたい

 

まず条件

1,人として自然

2,壁を通り抜けない

3,階段を登れる

 

項目1:キャラクターについているコンポーネント(C)

1RigidBody+Colliderのキャラクター

2CharctorControllerのキャラクター

 

項目2:スクリプト(S)

内容については次回で、とりあえずどういう移動方法が良いかだけ考えていきます

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

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

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

 

 

比較

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

例:C1/S2

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

 

・C1/S1

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

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

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

 

・C1/S2 (候補1)

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

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

 

・C1/S3

charctorcontrollerでないため使えない

 

 ・C2/S1

RigidBodyがないため使えない

 

・C2/S2

OnTriggerEnterで衝突判定可能

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

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

 

・C2/S3 (候補2)

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

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

 

「C1/S2」と「C2/S3」はこれでほぼ同等の動きができるようになりました。

 

 

実際の動作を比較

 わかりやすいように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生活