kazumalab tech log

流行りとリラックマと嵐が大好きです。技術的ログ。

カメラワークとプレイヤーの動きをUnityで実装する Part2 <ゼルダの伝説シリーズ>

かずまです。
前回の記事はこちら。

blog.kazumalab.com

そう、ゼルダの伝説です。

テーマ

今回のテーマはゼルダの伝説のプレイヤーの動きとカメラの動きを再現します。
しかし、昨日試行錯誤したのですが、ちょっと違うっぽい動きになってしまいました。
そのうち改善します。

考察

リンクの動きはカメラの方向が正面になります。
なので、動いている時にカメラを回転させたらその方向に移動する感じですね。

Playerを実装

まずはPlayerを動かします。
今回は拡張性を踏まえてCharactorControllerを使わないで自分で実装します。

上記スクリプトを書きます。
CharactorControllerではisGroundがあったので、それも実装してしまいます。

  1. Raycastで距離を測る
  2. Colliderでのあたり判定

この2つによって実装されます。
Colliderだけだと天井などに当たったときに反応してしまうのでRaycastも使います。


つけるコンポーネントは以下の通りです。
RigidbodyをつけてFreeze Rotationをすべてチェックいれます。
これをしないと物に当たった時に制御できなくなります。

f:id:kazumalab:20170328195415p:plain

次にPlayer.csを実装します。

これをPlayerのオブジェクトにくっつけます。
前回のブログでもちょこっとかきましたが、それにすこし付け足します。

UnityでXboxOneコントローラを使う…前に | 蒼玉亭
ここを参考にして、Playerの動きはXbox Controllerの左スティック、カメラの動きは右スティックを使って制御します。

Edit -> Project Settings -> Input
からMouse XとMouse Yがあるとおもうので、以下のように変更してあげます。
これでInput.GetAxis("Mouse X")でOKになります。

f:id:kazumalab:20170328200927p:plain

MacXbox Controllerを使う

Driverが必要だそうです。
github.com

ここからdmgを落としてくるなりでOKです。
再起動されます。

結果

ホントはこれ、カメラ動かしてないときはPlayerも回転させてかったけど...だめだった。
そのうち他のところ実装しながら思いついたらやり直します。