質問をすることでしか得られない、回答やアドバイスがある。

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

新規登録して質問してみよう
ただいま回答率
85.48%
Unity3D

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

Unity

Unityは、Unity Technologiesが開発・販売している、IDEを内蔵するゲームエンジンです。主にC#を用いたプログラミングでコンテンツの開発が可能です。

Q&A

解決済

1回答

1469閲覧

Unity:コントローラーとJoyStickの番号が合わない

kabirun

総合スコア7

Unity3D

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

Unity

Unityは、Unity Technologiesが開発・販売している、IDEを内蔵するゲームエンジンです。主にC#を用いたプログラミングでコンテンツの開発が可能です。

0グッド

1クリップ

投稿2018/05/27 14:34

編集2018/05/28 04:06

###前提・実現したいこと

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プレイヤーの明かりがついた状態」
とはこのXBoxガイドボタンのライトのことです。
イメージ説明

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

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

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

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

transform.GetChildは子オブジェクトを「見た目の順番」通りには取得しません。
Unityの子要素の取得順番 | 生存日記
なのでGameObjectの配列変数を作っておき、子オブジェクトを望んだ通りの順番で入れると確実です。


それはそれとして
「コントローラーに表示されている番号」「コントローラーに1プレイヤーの明かりがついた状態」とは具体的にどういう状態か分からないので(コントローラーのデバイス情報を見ているのかUnityの何かを見ているのか)、もし直らなかったらこの点追記をお願いします。

投稿2018/05/28 02:23

sakura_hana

総合スコア11427

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

kabirun

2018/05/28 04:10

解答ありがとうございます。 書いていただいた方法を試したのですが変化なしでした。 コントローラーに表示されている番号とはXBoxコントローラーのXBoxガイドボタンのライトのことです。 そのライトが1の位置で光っているのにJoyStick2で動くはずのプレイヤーが動いてしまい ライトが2の位置で光っているのにJoyStick1で動くはずのプレイヤーが動いてしまいます。 画像を追記しておきました。 拙い文章で申し訳ないです。
kabirun

2018/05/28 06:26

Unityの仕様なんですね... アセットも検討してみます。 ありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問