前提・実現したいこと
タイトルの通りボタンを押している間一人称視点(プレイヤーのモデルの目線)に
するスクリプトを作りたいと思っています。
以下が現在のスクリプトの内容です。
bool FPPは別の処理で使っているものです
public class PlayerController : MonoBehaviour { public bool FPP = false; float PushTime = 0; float Smooth = 5.0f; float TiltAngle = 70.0f; private void FirstPersonP() { GameObject FPPCam = GameObject.FindWithTag("FPPCamera"); GameObject Maincam = GameObject.FindWithTag("MainCamera"); Camera CamDepth = Maincam.GetComponent<Camera>(); float CDep = CamDepth.depth; if (Input.GetKey("k")) { if (CDep == -1) { CamDepth.depth = -3; } Rigidbody rb = GetComponent<Rigidbody>(); rb.isKinematic = true; float TiltAroundZ = Input.GetAxis("Horizontal") * TiltAngle; float TiltAroundX = Input.GetAxis("Vertical") * TiltAngle; Quaternion TrRot = transform.rotation; Quaternion FPPTrRot = FPPCam.transform.rotation; Quaternion Target = Quaternion.Euler(TiltAroundX, TiltAroundZ, 0); Target.z = 0; FPPCam.transform.rotation = Quaternion.Slerp(FPPTrRot, Target, Time.deltaTime * Smooth); } } private void Update() { GameObject FPPCam = GameObject.FindWithTag("FPPCamera"); GameObject Maincam = GameObject.FindWithTag("MainCamera"); Camera CamDepth = Maincam.GetComponent<Camera>(); float CDep = CamDepth.depth; if (Input.GetKey("k")) { PushTime += Time.deltaTime; if(PushTime >= 0.35) { FPP = true; FirstPersonP(); } } if (Input.GetKeyUp("k")) { CamDepth.depth = -1; PushTime = 0; FPP = false; FPPCam.transform.rotation = new Quaternion(0, 0, 0, 0); rb.isKinematic = false; } } }
playerの子オブジェクトとしてFPPCameraをつけています。
このスクリプトはplayerにアタッチされています。
MainCameraは別のオブジェクトです。(playerと親子関係はありません)
まずupdate内でkキーが長押しされているか判定します。
長押しされていない場合何も起きません。
長押しされた(PushTimeが0.35以上の)場合、
FirstPersonP()を処理します。
処理の最初にdepthをいじってカメラを切り替えます。
次にplayerのRigidbodyをkinematicにしplayerを動けなくします。
最後にkキーを離すまでカメラを操作します。
kキーが離された場合、いじった変数の中身をupdate内で元に戻しています。
発生している問題
このスクリプトだと+Z方向を見ている間は問題ないのですが
それ以外の方向を向いていても強制的に+Z方向にFPPCameraが向いてしまいます。
1,プレイヤーが向いている方向で一人称視点にしたい。
2,verticalとhorizontalの二つに入力があるとz軸がなぜか回ってしまう。
試したこと
Quaternion Target = Quaternion.Euler(TrRot.x + TiltAroundX,TrRot.y + TiltAroundZ, 0);
↑Targetの値にplayerの回転を足せばその方向を向いてくれるかなと思ったけど
何も変わりませんでした。
FPPTrRot.y += TrRot.y;
↑FPPCameraのy軸にplayerのy軸を足したらどうなるか試したら
なぜかカメラがガクガクするようになり、カメラがほとんど回らなくなりました。
そのほか
いつもはわからないところは検索して解決するのですが
今回はどこがどう悪いのか(特に試したことの二つ目)
どう検索すればいいのか分からなかったため質問させていただきました。
仕上がったスクリプトなどの完全な答えでなくて構いません。
(もちろん完全な答えであってもしっかり参考にさせていただきますし、とても助かります)
この単語を検索すると解決するかもとか
このスクリプトのどこが間違えていてこういう考え方をすればいいかもとか
そういうヒントでもとても助かります。
よろしくお願いします。
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2019/01/14 02:06