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

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

新規登録して質問してみよう
ただいま回答率
85.47%
Oculus Quest

Oculus Questは、Facebookの小会社であるOculus VRが開発したVRヘッドセットです。独立型でPCやスマートフォンは不要。6DoFのトラッキングに優れている点が特徴です。すでに販売終了となっていますが、2020年10月には後継のOculus Quest 2が販売されています。

TCP

TCP(Transmission Control Protocol)とは、トランスポート層のプロトコルで、コネクション型のデータサービスです。

Unity3D

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

Q&A

解決済

1回答

265閲覧

unityプロジェクト(PC)とunityプロジェクト(oculus)での通信

dfaafa

総合スコア4

Oculus Quest

Oculus Questは、Facebookの小会社であるOculus VRが開発したVRヘッドセットです。独立型でPCやスマートフォンは不要。6DoFのトラッキングに優れている点が特徴です。すでに販売終了となっていますが、2020年10月には後継のOculus Quest 2が販売されています。

TCP

TCP(Transmission Control Protocol)とは、トランスポート層のプロトコルで、コネクション型のデータサービスです。

Unity3D

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

0グッド

0クリップ

投稿2023/10/27 08:25

編集2023/10/27 09:32

実現したいこと

pc上で実行したunityプロジェクトからandroidアプリ向けにビルドしoculus questで実行したunityプロジェクトにテキストを送信したい

前提

oculusでVRアプリケーションを作っています.別プロジェクトからテキスト送信ができたらよいなと思い,こちらを参考にTCP通信を試しました.しかし,PC上でのプロジェクト間通信はうまくいくものの,oculusとpcでの通信はできませんでした.
同一のネットワーク上で試しています.

試したこと

参考サイトのコードを試しました.

C#

1using System; 2using System.Net.Sockets; 3using System.Text; 4using UnityEngine; 5 6/// <summary> 7/// TCP 通信を行うクライアント側のコンポーネント 8/// </summary> 9public class Client : MonoBehaviour 10{ 11 //================================================================================ 12 // 変数 13 //================================================================================ 14 // この IP アドレスとポート番号はサーバ側と統一すること 15 public string m_ipAddress = "127.0.0.1"; 16 public int m_port = 2001; 17 18 private TcpClient m_tcpClient; 19 private NetworkStream m_networkStream; 20 private bool m_isConnection; 21 22 private string m_message = "ピカチュウ"; // サーバに送信する文字列 23 24 //================================================================================ 25 // 関数 26 //================================================================================ 27 /// <summary> 28 /// 初期化する時に呼び出されます 29 /// </summary> 30 private void Awake() 31 { 32 try 33 { 34 // 指定された IP アドレスとポートでサーバに接続します 35 m_tcpClient = new TcpClient( m_ipAddress, m_port ); 36 m_networkStream = m_tcpClient.GetStream(); 37 m_isConnection = true; 38 39 Debug.LogFormat( "接続成功" ); 40 } 41 catch ( SocketException ) 42 { 43 // サーバが起動しておらず接続に失敗した場合はここに来ます 44 Debug.LogError( "接続失敗" ); 45 } 46 } 47 48 /// <summary> 49 /// GUI を描画する時に呼び出されます 50 /// </summary> 51 public void OnGUI() 52 { 53 // Awake 関数で接続に失敗した場合はその旨を表示します 54 if ( !m_isConnection ) 55 { 56 GUILayout.Label( "接続していません" ); 57 return; 58 } 59 60 // サーバに送信する文字列 61 m_message = GUILayout.TextField( m_message ); 62 63 // 送信ボタンが押されたら 64 if ( GUILayout.Button( "送信" ) ) 65 { 66 try 67 { 68 // サーバに文字列を送信します 69 var buffer = Encoding.UTF8.GetBytes( m_message ); 70 m_networkStream.Write( buffer, 0, buffer.Length ); 71 72 Debug.LogFormat( "送信成功:{0}", m_message ); 73 } 74 catch ( Exception ) 75 { 76 // サーバが起動しておらず送信に失敗した場合はここに来ます 77 // SocketException 型だと例外のキャッチができないようなので 78 // Exception 型で例外をキャッチしています 79 Debug.LogError( "送信失敗" ); 80 } 81 } 82 } 83 84 /// <summary> 85 /// 破棄する時に呼び出されます 86 /// </summary> 87 private void OnDestroy() 88 { 89 // 通信に使用したインスタンスを破棄します 90 // Awake 関数でインスタンスの生成に失敗している可能性もあるので 91 // null 条件演算子を使用しています 92 m_tcpClient?.Dispose(); 93 m_networkStream?.Dispose(); 94 95 Debug.Log( "切断" ); 96 } 97}

C#

1using System.Net; 2using System.Net.Sockets; 3using System.Text; 4using System.Threading.Tasks; 5using UnityEngine; 6 7/// <summary> 8/// TCP 通信を行うサーバ側のコンポーネント 9/// </summary> 10public class Server : MonoBehaviour 11{ 12 //================================================================================ 13 // 変数 14 //================================================================================ 15 // この IP アドレスとポート番号はクライアント側と統一すること 16 public string m_ipAddress = "127.0.0.1"; 17 public int m_port = 2001; 18 19 private TcpListener m_tcpListener; 20 private TcpClient m_tcpClient; 21 private NetworkStream m_networkStream; 22 23 private string m_message = string.Empty; // クライアントから受信した文字列 24 25 //================================================================================ 26 // 関数 27 //================================================================================ 28 /// <summary> 29 /// 初期化する時に呼び出されます 30 /// </summary> 31 private void Awake() 32 { 33 // クライアントから文字列を受信する処理を非同期で実行します 34 // 非同期で実行しないと接続が終了するまで受信した文字列を UI に表示できません 35 Task.Run( () => OnProcess() ); 36 } 37 38 /// <summary> 39 /// クライアント側から通信を監視し続けます 40 /// </summary> 41 private void OnProcess() 42 { 43 var ipAddress = IPAddress.Parse( m_ipAddress ); 44 m_tcpListener = new TcpListener( ipAddress, m_port ); 45 m_tcpListener.Start(); 46 47 Debug.Log( "待機中" ); 48 49 // クライアントからの接続を待機します 50 m_tcpClient = m_tcpListener.AcceptTcpClient(); 51 52 Debug.Log( "接続完了" ); 53 54 // クライアントからの接続が完了したので 55 // クライアントから文字列が送信されるのを待機します 56 m_networkStream = m_tcpClient.GetStream(); 57 58 while ( true ) 59 { 60 var buffer = new byte[256]; 61 var count = m_networkStream.Read( buffer, 0, buffer.Length ); 62 63 // クライアントからの接続が切断された場合は 64 if ( count == 0 ) 65 { 66 Debug.Log( "切断" ); 67 68 // 通信に使用したインスタンスを破棄して 69 OnDestroy(); 70 71 // 再度クライアントからの接続を待機します 72 Task.Run( () => OnProcess() ); 73 74 break; 75 } 76 77 // クライアントから文字列を受信した場合は 78 // GUI とログに出力します 79 var message = Encoding.UTF8.GetString( buffer, 0, count ); 80 m_message += message + "\n"; 81 82 Debug.LogFormat( "受信成功:{0}", message ); 83 } 84 } 85 86 /// <summary> 87 /// GUI を描画する時に呼び出されます 88 /// </summary> 89 private void OnGUI() 90 { 91 // クライアントから受信したすべての文字列を表示します 92 GUILayout.TextArea( m_message ); 93 } 94 95 /// <summary> 96 /// 破棄する時に呼び出されます 97 /// </summary> 98 private void OnDestroy() 99 { 100 // 通信に使用したインスタンスを破棄します 101 m_networkStream?.Dispose(); 102 m_tcpClient?.Dispose(); 103 m_tcpListener?.Stop(); 104 } 105}

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

接続が失敗する.→ andoroidアプリにビルドして実行しているのが原因かもしれない.
androidでビルド&実行したものとPC上で実行したプロジェクト間でのTCP通信のサンプル等があれば教えて頂きたいです.

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

oculus quest
unity hub :3.4.1
unity editor :2021.3.22f1

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

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

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

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

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

fiveHundred

2023/10/27 10:02

別のPCとの接続は試しましたか?
dfaafa

2023/10/28 06:32

コメントありがとうございます。他PCで環境構築し接続を試みましたがこちらでもうまくいきませんでした.なぜかoculus側では接続待ち状態になりません。
fiveHundred

2023/10/28 07:14

2つのPC間という意味で書きました。 言葉足らずですいません。
dfaafa

2023/10/28 10:05

はい。そちらはうまくいきました
guest

回答1

0

自己解決

原因はわかりませんが、UDPでのプロセス間通信では成功しました。

投稿2023/11/07 07:44

dfaafa

総合スコア4

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.47%

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

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

質問する

関連した質問