質問するログイン新規登録

Q&A

解決済

1回答

113閲覧

unityでXboxkコントローラーを接続してみたのですが視点移動がうまくいきませんどうしたらいいですか?

Yumemigati_Boy

総合スコア1

ゲーム制作

ゲーム制作は、UnityやUnreal Engineなどを使ったゲームの開発に関する投稿です。

Unity3D

Unity3Dは、ゲームや対話式の3Dアプリケーション、トレーニングシュミレーション、そして医学的・建築学的な技術を可視化する、商業用の開発プラットフォームです。

0グッド

0クリップ

投稿2025/12/14 06:56

0

0

実現したいこと

視点移動を正常に動作するようにしてほしい。

発生している問題・分からないこと

やりたいことは、標準的なFPS操作(右スティックの左右で体ごと回転、上下で首だけ回転)です。左ステックで移動は出来てるのですが、右ステックは上を向いたら左を向いて、下を向いたら右を向く、そして左右の入力は動作しないという問題が起きています。
Playerを動かして、2つのカメラが入ってるCameraBoxを視点移動として使おうと考えています。イメージ説明

Unityの設定がおかしいだとかGPTでは言ってたのですがわかりません。
イメージ説明

該当のソースコード

C#

1using UnityEngine; 2 3public class PlayerController : MonoBehaviour 4{ 5 [Header("設定")] 6 public float moveSpeed = 5f; 7 public float lookSensitivity = 150f; 8 public Transform cameraBox; // ここにCameraBoxをドラッグする 9 10 private float verticalRotation = 0f; 11 12 void Start() 13 { 14 // マウスをロック(コントローラー操作でも推奨) 15 Cursor.lockState = CursorLockMode.Locked; 16 } 17 18 void Update() 19 { 20 // --- 1. 移動 (左スティック) --- 21 float mX = Input.GetAxisRaw("Horizontal"); 22 float mY = Input.GetAxisRaw("Vertical"); 23 24 if (Mathf.Abs(mX) > 0.1f || Mathf.Abs(mY) > 0.1f) 25 { 26 // Player本体の向きを基準に移動 27 Vector3 moveDir = (transform.forward * mY) + (transform.right * mX); 28 transform.position += moveDir.normalized * moveSpeed * Time.deltaTime; 29 } 30 31 // --- 2. 視点移動 (右スティック) --- 32 // --- 右スティック --- 33 float hLook = Input.GetAxisRaw("Joystick Axis 4"); // 上下 34 float vLook = -Input.GetAxisRaw("Joystick Axis 5"); // 左右 35 36 // 左右回転 37 if (Mathf.Abs(vLook) > 0.1f) 38 { 39 transform.Rotate(Vector3.up * vLook * lookSensitivity * Time.deltaTime); 40 } 41 42 // 上下回転 43 if (cameraBox != null && Mathf.Abs(hLook) > 0.1f) 44 { 45 verticalRotation -= hLook * lookSensitivity * Time.deltaTime; 46 verticalRotation = Mathf.Clamp(verticalRotation, -80f, 80f); 47 cameraBox.localRotation = Quaternion.Euler(verticalRotation, 0, 0); 48 } 49 50 } 51}

試したこと・調べたこと

  • teratailやGoogle等で検索した
  • ソースコードを自分なりに変更した
  • 知人に聞いた
  • その他
上記の詳細・結果

GPTやGeminiでもコントローラーとの割り当てが違うのではないかなどと言われあれこれ試しましたが解決せず右ステックだけおかしいという結論になりました。

補足

特になし

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

guest

回答1

0

ベストアンサー

コントローラーによって、どの軸がどれに対応しているのかが異なります。

右ステックは上を向いたら左を向いて、下を向いたら右を向く

ということは、上下の軸を左右の軸として扱っているのわけですし、

左右の入力は動作しない

ということは、左右の軸は設定していない他の軸に割り当てられているということになります。

まずは、「どの方向に倒されたとき、どの値が変化するのか」のかを全てチェックし、それに基づいて動作させる必要があります。
ただ、先ほど言った通り、これはコントローラーによって異なるので、キーコンフィグがほぼ必須となるので、まずはこれを実装したほうがよろしいかと思います。

あるいは、現在Unity公式はInput Systemを使うことを推奨しているので、こちらを使うのも手だと思います。
旧来のもののほうが分かりやすいかもしれませんが、キーコンフィグを作らなければならないのであれば、結局手間がかかってしまうので、こちらの方法を使ったほうがいいかもしれません。

投稿2025/12/14 09:42

fiveHundred

総合スコア10531

Yumemigati_Boy

2025/12/14 11:43

回答ありがとうございます。 試したところ問題が解決しました! ベストアンサーに選ばせていただきました。 X軸とY軸の値をそれぞれスティックを傾けた時どうなるか試してみたところ、右スティック前後がaxis4、左右がaxis3でした。値も真逆だったので回転数に-1をかけることでうまく動作させることができました。勉強になりました。ありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.29%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問