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

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

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

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

Q&A

0回答

922閲覧

unity,unetでジョイステックが生成されない

aoaoo

総合スコア11

Unity

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

0グッド

1クリップ

投稿2018/10/11 09:04

編集2022/01/12 10:55

前提・実現したいこと

初めの質問なので何か的外れなことをしていたらすみません

unity2Dでスマホでできる上視点からのシューティングゲームを作っています。
そこでシングルモード(PVE)とマルチモード(PVP)の2つを作ろうと思っていてシングルモードは問題なくできました、そこからマルチモードを作ろうと思い今までネットワーク絡みの物を作ったことがなかったので色々探してUNETなるものを発見してunity公式のチュートリアルを見ながらNetworkManagerやNetWorkmanagerHUBを追加して実際の動作を見てみたんですがジョイスティックが生成されなくなりました。

あとUNETと画面タッチやジョイステック系の相性やスマホでジョイステックを使ったマルチゲーの作り方のテンプレなどあったら教えてほしいです。
今unityの1つのシーン内だけでUNETを適用させてるんですが何か問題があったりしますかね?
私が今考えているのは推測でしかないんですがジョイスティックがキャンバス上に生成されてなかったりしますかね?

発生している問題・エラーメッセージ

build&runで2画面表示をして互いにオブジェクトを生成して十字キーで上下左右の移動まではできるんですがジョイステックが生成されません。 NullReferenceException: Object reference not set to an instance of an object PlayerBullet.Start () (at Assets/Script/PlayerBullet.cs:24)

該当のソースコード

すみません該当のソースコードがわからなかったのでエラーが起きているジョイステックの座標を得てPlayerを移動させるコードを載せておきます。
今は矢印キーとジョイステックLでPlayerの移動、ジョイステックRで球を打ち出そうとしてます。

C#

1using System.Collections; 2using System.Collections.Generic; 3using UnityEngine; 4using UnityEngine.Networking; 5 6public class MasterMove : NetworkBehaviour { 7 8 //速度 9 public Vector2 SPEED = new Vector2(0.1f, 0.1f); 10 //ジョイスティック 11 public NetSimpleTouchController controllerL; 12 public NetSimpleTouchController controllerR; 13 //プレハブの用意 14 public GameObject bullet; 15 // 連射時設定 16 private float time = 0f; 17 public float bulletinterval = 0.8f; 18 19 public static int gameover = 0; 20 public static Vector2 PC; 21 public Sprite cliant; 22 23 24 25 26 // Use this for initialization 27 void Start() 28 { 29 gameover = 0; 30 } 31 32 // Update is called once per frame 33 void Update() 34 { 35 if (!isLocalPlayer) 36 { 37 return; 38 } 39 40 41 42 //Position=Playerの純粋な現在地 43 Vector2 Position = transform.position; 44 //Jposition=バレットの出現位置、Playerと接触しないように少しずらしてる、↓でPositionと合成して利用中 45 Vector2 JPosition = controllerR.GetTouchPosition; 46 //等倍で合算するとPlayerから距離ができるから半分に調整(小数点が使えないから計算2/3にしてる)abcは計算用 47 Vector2 abc = controllerR.GetTouchPosition; 48 abc = abc / 30; 49 JPosition = JPosition - abc; 50 //ジョイステックを操作してないときに球が出ないようにする判定用変数、これがスタンダード(0,0)でなければ球を発射 51 Vector2 CheckPosition = controllerR.GetTouchPosition; 52 //スタンダードポジション、ジョイスティックの操作してるかの判定に使う基準(0,0)の変数、0が入れられなかったから*0 53 Vector2 StandardPosition = controllerR.GetTouchPosition; 54 StandardPosition = StandardPosition * 0; 55 56 //キャラ移動用左スティック 57 Vector2 LPosition = controllerL.GetTouchPosition; 58 Vector2 Labc = controllerL.GetTouchPosition; 59 Labc = Labc / 20; 60 Labc += Labc * 18; 61 LPosition = LPosition - Labc; 62 Position += LPosition; 63 PC = Position; 64 65 66 if (Input.GetKey("left")) 67 { 68 //←押してる間減算処理で左へ移動 69 Position.x -= SPEED.x; 70 } 71 if (Input.GetKey("right")) 72 { 73 //→押してる間加算処理で右に移動 74 Position.x += SPEED.x; 75 } 76 if (Input.GetKey("up")) 77 { 78 //↑押してる間加算処理で上に移動 79 Position.y += SPEED.y; 80 } 81 if (Input.GetKey("down")) 82 { 83 //↓押してる間減算処理で下に移動 84 Position.y -= SPEED.y; 85 } 86 87 //加減処理の結果を反映 88 transform.position = Position; 89 90 JPosition = Position + JPosition; 91 92 93 time += Time.deltaTime; 94 if (StandardPosition != CheckPosition) 95 { 96 97 if (time >= bulletinterval) 98 { 99 if (CheckPosition.x > 0.9 | CheckPosition.x < -0.9 | CheckPosition.y > 0.9 | CheckPosition.y < -0.9) 100 { 101 Instantiate(bullet, JPosition, transform.rotation); 102 time = 0f; 103 104 } 105 106 } 107 } 108 //Debug.Log(Position); 109 if (gameover >= 1) 110 { 111 Destroy(gameObject); 112 } 113 } 114 115 public override void OnStartLocalPlayer() 116 { 117 GetComponent<SpriteRenderer>().sprite = cliant; 118 } 119 120 void OnCollisionEnter2D(Collision2D other) 121 { 122 if (other.gameObject.tag == "Bullet") 123 { 124 gameover += 1; 125 } 126 } 127 void OnTriggerEnter2D(Collider2D other) 128 { 129 if (other.gameObject.tag == "Enemy") 130 { 131 gameover += 1; 132 } 133 if (other.gameObject.tag == "EBullet") 134 { 135 gameover += 1; 136 } 137 } 138} 139 140 141

試したこと

NetworkManagerのRegistered Spawnable Prefabにジョイステックを追加。
ジョイステックにnetworkidentityの追加。
スクリプトの名前空間にUnityEngin.Networkingを追加。
MonoBehaviourをNetworkBehaviourに変更しオブジェクト内に追加しなおしたりしたんですが変化ないです。

補足情報(FW/ツールのバージョンなど)

unityバージョン unity2017.4.2f2
参考にしたチュートリアル https://unity3d.com/jp/learn/tutorials/s/multiplayer-networking
利用しているジョイステック http://baba-s.hatenablog.com/entry/2018/01/26/083100

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

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

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

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

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

guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだ回答がついていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問