球体以外の形状の上を歩く

 球体の上を歩くことはとりあえずできたんですが、よく考えてみたら、XYZに不均等な形状の場合は上手くいかないことに気が付きました。

 

スーパーマリオギャラクシーではへんてこな形状のものの上も歩いていたはず・・・。

 

別な方法が必要になりました。

 

そして、色々やってみたら、結局のところ面の法線方向を基準に立てばいいという結論に達しました。

 

今までの苦労は一体・・・。

 

 

方法としては、UnityのスタンダードアセットにあるThirdPersonCharacterのCheckGroundStatus()をコピーして、キャラクターの足元の情報を取得しました。

面の法線がm_GroundNormalに入るので、あとはそれをキャラクターの上方向と合うようにQuaternion.FromToRotationで方向を合わせれば、あとは面の法線と逆方向に毎フレームtransform.positionを変化させるだけですね。

 

文章にすると非常に短い。

 

ただし、この方法だとなぜか星の裏側(Y軸のマイナスがキャラクターの上になるあたり)でおかしな挙動を示します。

 

確か、スーパーマリオギャラクシーでも少しあったような気が・・・。

 

なぜかオブジェクトの中心(Y軸のマイナス側)辺りを向こうとします。

 

どうも面の法線方向にキャラクターの上方向を合わせるあたりが原因のようです。

・・・ただ、解決方法が見つからない。

 

そして、もう一つ重大な問題が。

 

恐らくこのままだと旋回できない。

 

・・・出来ましたけど、構造がややこしくなりました。

 

今のところ一つのスクリプトではできませんでした。

 

どうにも軸合わせの辺りがネックになりそうです。

 

完成までもう少し時間がかかりそうです。