前提・実現したいこと
タッチ操作で、GetAxisを取得することは可能ですか?
可能な場合、その実装方法を教えていただきたいです。
宜しくお願い致します。
試したこと
標準アセットのプレハブのFPSControllerを試したところ、
マウス操作でGetAxisしていて、アングルの変更ができていました。
解析した箇所は下記です。
FirstPersonController.cs
C#
1 private void RotateView() 2 { 3 m_MouseLook.LookRotation (transform, m_Camera.transform); 4 }
MouseLock.cs
C#
1 public void LookRotation(Transform character, Transform camera) 2 { 3 float yRot = CrossPlatformInputManager.GetAxis("Mouse X") * XSensitivity; 4 float xRot = CrossPlatformInputManager.GetAxis("Mouse Y") * YSensitivity; 5 6 m_CharacterTargetRot *= Quaternion.Euler (0f, yRot, 0f); 7 m_CameraTargetRot *= Quaternion.Euler (-xRot, 0f, 0f); 8 9 if(clampVerticalRotation) 10 m_CameraTargetRot = ClampRotationAroundXAxis (m_CameraTargetRot); 11 12 if(smooth) 13 { 14 character.localRotation = Quaternion.Slerp (character.localRotation, m_CharacterTargetRot, 15 smoothTime * Time.deltaTime); 16 camera.localRotation = Quaternion.Slerp (camera.localRotation, m_CameraTargetRot, 17 smoothTime * Time.deltaTime); 18 } 19 else 20 { 21 character.localRotation = m_CharacterTargetRot; 22 camera.localRotation = m_CameraTargetRot; 23 } 24 25 UpdateCursorLock(); 26 }
CrossPlatformInputManager.csに関しては、ここから先の構造がよくわかりませんでした。
C#
1 // returns the platform appropriate axis for the given name 2 public static float GetAxis(string name) 3 { 4 return GetAxis(name, false); 5 }
標準アセットのプレハブのFPSControllerのプレハブをシーンに配置してゲームを実行してみると、
特にゲームパットとかのUIを置かないで、マウス移動だけで、GetAxisを取得してアングル変更しているように思えたので、
これと同様にタッチ移動で、GetAxisを取得できることが可能かもしれないと思い、質問しました。
最終的な目標としては、このFPSControllerを改造して、タッチ移動でアングル変更できるように実装することですが、
そもそも、まず、タッチ移動でGetAxisの取得が可能かどうか?という疑問と、
その実装方法を知りたくて質問しました。
こちらのサイトでは、
一見、モバイルでGetAxisの取得ができているように見えますが、
MobileSingleStickControlというUIを使って取得しているので、意図したいこととは違います。
FPSControllerのUIを使わないマウス移動によるGetAxisの取得と同様に、
純粋なタッチ移動だけでGetAxisの取得をしたいです。
CrossPlatformInputManager.csをもっと解析すればそのヒントが見つかるかもしれないですが、
CrossPlatformInputManager.csに関しては、上記のGetAxisを見つけた後、これ以上、どのようにコードを追っていけばよいかわかりませんでした。
ご教示お願い致します。
追記。
最終的に行き着いたメソッド。
StandaloneInput.cs
C#
1 public override float GetAxis(string name, bool raw) 2 { 3 return raw ? Input.GetAxisRaw(name) : Input.GetAxis(name); 4 }
このメソッド内でログを取ったところ、毎回rawの値はfalseでした。
よって、Input.GetAxis(name)が動いているみたいです。
このメソッド内でnameのログを取ったところ、どういう挙動で出力が分かれるのかはわからなかったですが、
下記4つの出力がとれました。
Vertical Horizontal Mouse X Mouse Y
そして、Input.GetAxisって、そもそも何か?と分からなくなってしまったので、
別のサンプルコードで下記ログを取りました。
C#
1 void Update () { 2 Debug.Log(Input.GetAxis("Vertical")); 3 Debug.Log(Input.GetAxis("Horizontal")); 4 Debug.Log(Input.GetAxis("Mouse X")); 5 Debug.Log(Input.GetAxis("Mouse Y")); 6 }
VerticalとHorizontalは常に0を出力したままでした。
Mouse XやMouse Yは-1~1の間の値を出力しているようでしたが、どういう挙動で(例えばマウスの移動スピードで?)、
この値が出力されているのかよくわかりません。
そして、なぜ、VerticalとHorizontalは常に0を出力したままなのでしょうか?
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
退会済みユーザー
2019/01/02 06:04
2019/01/02 07:07
退会済みユーザー
2019/01/03 01:53 編集