一人称視点 in iOS (2)【Unity】 - (:3[kanのメモ帳]
の続きです.
問題点
前回,重大な問題が発覚したと言いましたが,
それは移動方向と視点方向が一致していない
ということです.
Wキーを押したら常に向いてる方向に進む予定が,
現在の状態ではWキーはプラスのZ方向に進む事になってしまっています.
つまり,回転すると思った方向に進めなくなるということです.
これではアカンので変更を加えていきます.
移動方向の変更
オブジェクトが向いている方向はtransform.forward
オブジェクトの右側方向はtransform.right
で取得できます.これを利用してスクリプトを変更します.
transform.forward及びtransform.rightはVector3なので,
これを直接velocityに加算することで,進む方向を決定しています.
ただし,下方向を見ていると velocity -= transform.forward とした時,
つまり後ろに進もうとした時に上方向に飛んでしまうため,
velocity.y = -gravity (velocity.y -= gravity ではなく)
として入力による上下移動を消しつつ,重力を加えています.
タッチ操作による視点移動
キーボードによる操作が出来るようになったので,
同様の事をタッチ操作でも出来るようにします.
画面上で指を動かすとその方向に視点が変わる,
という感じにしたいのですが,単純に実装してしまうとバーチャルパッドを
動かした時にも同時に視点が動いてしまいそうです.
なので,バーチャルパッドに触れている指は視点操作に関与しないようにします.
RaycastHit
オブジェクトがタッチされているかを判定する時には
RaycastHitが使えるそうです.
タップされた位置から画面奥に、レイと呼ばれる光線をカメラが飛ばします。一番最初に光線が当たった場合に、その情報を取得できます。
オブジェクトがタップされたかを判定する | Unity3Dのプラグインによる開発
なんと便利な!
という事で,以下実装例.
Unity RaycastHit ジョイスティックにタッチ判定したかった
GameObject.Findでカメラを探し,それを.cameraでCameraにキャスト,
そして光線を飛ばし,当たったオブジェクトのタグを確認してjoystickであれば
Logを出すようにしたのですが…
joystickに当たらないorz
試しに他のオブジェクトにタグを付けて確認した所,しっかり判定が出来るので,
どうやらGUIは判定出来ないようです…どうしたもんか_(:3ノ ∠)_
今回はここまで.