###前提・実現したいこと
UnityのC#で開発をしています。
3Dでオフラインの4人対戦ゲームを作っています。
一つのパソコンに4つのコントローラーを繋いで、1~4Playerをそれぞれのコントローラーで
動かせるようにしたいと思い、以下の方法をとりました。
・UnityのInputManagerに
XAxisでHorizontal1~4と
YAxisでVertical1~4を
JoyStick1~4をそれぞれ指定し追加
・Player1~4を生成する際にそれぞれStringで指定する
・移動処理を行う
以上の処理でそれぞれのコントローラーでそれぞれのプレイヤーを動かすことに成功しました。
###発生している問題
問題はここからで、たまにUnity上でゲームを起動すると
「コントローラーに表示されている番号とゲーム上のプレイヤーの番号が一致しない」
という現象が発生してます。
使っているコントローラーはXBox360コントローラーなのですが
・コントローラー上では1プレイヤーと表示されている
・このコントローラーで動かすと画面で動いているのは2プレイヤーに該当するオブジェクト
となってしまいます。
つまりJoyStick2を割り当てているはずなのにコントローラー1で動いてしまうのです。
なぜこのような現象が起きてしまうのでしょうか。
このような場合にコントローラーの番号とJoyStickの番号を一致させる方法はあるのでしょうか。
###該当のソースコード
プレイヤーを生成する際のScriptから抜粋
public GameObject player; void Awake () { //子オブジェクト4つの位置に順番に生成 for (int i = 0; i < transform.childCount; i++) { GameObject p = Instantiate(player, transform.GetChild(i).transform.position,Quaternion.identity);//プレイヤー生成 p.name = "Player" + (i + 1);//名前変更 p.GetComponent<PlayerMove>().horizontal = "Horizontal" + (i + 1);//そのプレイヤーの使うHorizontal指定 p.GetComponent<PlayerMove>().vertical = "Vertical" + (i + 1);//そのプレイヤーの使うVertical指定 } }
プレイヤー移動処理一部抜粋
[HideInInspector] public string horizontal;//Inputの左スティック横方向取得名前 [HideInInspector] public string vertical;//Inputの左スティック縦方向取得名前 float AxisX = 0;//プレイヤーのx移動方向 float AxisZ = 0;//プレイヤーのz移動方向 void Update() { //方向指定 AxisX = Input.GetAxis(horizontal); AxisZ = Input.GetAxis(vertical); //移動処理(省略) }
###試したこと
コントローラーに1プレイヤーの明かりがついた状態で2プレイヤーが動く。
2プレイヤーのHorizontalとVerticalをログで出すと
Horizontal2とVertical2をちゃんと取っている
(Horizontal2とVartical2にはJoyStick2を割り当てている)
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2018/05/28 04:10
2018/05/28 06:19
2018/05/28 06:26