読者です 読者をやめる 読者になる 読者になる

(:3[kanのメモ帳]

個人ゲーム開発者kan.kikuchiのメモ的技術ブログ。月木更新でUnity関連がメイン。

一人称視点 in iOS (3)【Unity】

Unity

このエントリーをはてなブックマークに追加

一人称視点 in iOS (2)【Unity】 - (:3[kanのメモ帳]
の続きです.

問題点


前回,重大な問題が発覚したと言いましたが,
それは移動方向と視点方向が一致していない
ということです.


Wキーを押したら常に向いてる方向に進む予定が,
現在の状態ではWキーはプラスのZ方向に進む事になってしまっています.
つまり,回転すると思った方向に進めなくなるということです.


これではアカンので変更を加えていきます.


移動方向の変更


オブジェクトが向いている方向はtransform.forward
オブジェクトの右側方向はtransform.right
で取得できます.これを利用してスクリプトを変更します.



Unity 移動+視点移動(移動改善)


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ノ ∠)_


今回はここまで.