江上宿六です。
前回の続きになりました。 カメラの向きを変えるとその分だけ動きがズレる
というのは操作として致命的と言いますか、絶対に嫌なやつですよね。
何故そうなるかですが、そりゃ単純に向きを絶対的に指定しているからです。
オブジェクトを配置してみました。 原点に対して赤が0度で青が180度的なのです。
今まではカメラがS極寄りからキャラクターを映していましたがこれを180度
回転させて実行してみます。
因みにですが、(0,0,0)の地点に空のオブジェクトを配置して親子関係を設定し、
そこを軸にして180度回転させました。 キャラ用の空オブジェクトの子にして
回転させるというのも良かったんですけど、それだとキャラも回転しますからね。
設計しくじってる感はありますが、今は別に良いでしょう。
結果は見ての通り180度回転してしまってるわけです、これは嫌なやつです。
なので直すわけですけど、またちょっとコツが要るのはクォータニオンのせいです。
まずはカメラの回転を取得します。 Start関数内でカメラの親である
空のオブジェクト(CameraPole)を探しGameObject型のcamera_objに入れます。
Update関数内でfloat型のカメラの回転を入れたい変数camera_dyに先ほど取得した
カメラの回転を持った親オブジェクトのtransform.rotation.eulerAngles.yを入れます。
まぁ、何回かやってますけどこのtransform.rotationはクォータニオンなのでして。
そのままyを取得しても求めていた値は得られないのです。 このようにすることで
オイラー角での角度、インスペクターでも見られるような角度が得られます。
あとはisMoveの真偽判定の所で真、歩いている=入力がある状態ならば、その分
y軸を回転させる、という感じで処理をしています。 スマートさには欠けますが。
カメラがS極の方を向いていてもキー入力の通りに回転してくれましたね。
この回転させる角度には絶対値を使った方が良いのかなとは思いましたけど
その辺りの判断は各自にお任せします。
これで終わりとしたらちょっと不満が残るというか、アレなので続きます。
もう右スティックでカメラも回転させようかと、そういう感じです。
Edit→ProjectSettings→InputでAxisのサイズを拡張しようと思いましたが、
スティック入力を司るのHorizontalとVerticalの所をそれぞれ右クリックして
DuplicateArrayElementを選択する事で複製が出来るので、それぞれ複製して
分かり易い名前、Horizontal_RだとかVerticalRだとかにしましょう。
忘れてはならないのはその中身で、このTypeとAxisをちゃんと右スティック用に
しておく事ですね。 Typeは複製元を間違えなければちゃんとなってますけども
Axisはそれぞれ環境で異なったりしますので、自身の環境を確認しましょう。
自分の環境では3rdが右スティックのX軸で4thが右スティックのY軸でした。
左スティックの時同様にInput.GetAxisで傾きを取得してやります。
まぁ、今回は縦方向は良いかなという事で左右回転だけ設定しました。
こちらの回転はRotateを使えば良いんじゃないですかね、という感じで。
1枚目のgifはカメラだけを回転させてみたやつで、2枚目のはずっと左を押したまま
カメラを回転させてみたというやつです。 どうです、ちゃんと動いてますよね。
このカメラ制御はDQやMHをやってて扱いやすいから実現したいなあと
思っていたやつで、前回は不安に思いながら出来そうだとは書いてましたけども
ちゃんと思った様に出来て良かったです。 カメラを回転させながらも同一方向に
走り抜けるのが結構好きなんです。
まぁ、今回はこんな感じですかね。 次回はまた何をやるか考えておきます。