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

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

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

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

Unity

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

Q&A

解決済

2回答

311閲覧

受信を行ったときのみテキストに表示させたい

UKAWATAKATO

総合スコア14

C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

Unity

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

0グッド

0クリップ

投稿2018/09/05 06:49

編集2018/09/05 07:44
エラー targetText = GameObject.Find("TextLog").GetComponent<Text>().GetComponent<Text>();のとこに object reference not set to an instance とでてきてしまいます。 条件で受信を行ったときのみテキストに表示させたい。 ifを使い 受信を行ったときのみ フラグをfulseするといわれたのですが どうしたらいいかわかりませんでした。 TextはUnityで表示しているものです。 ```C#``` コード using System.Collections; using System.Collections.Generic; using UnityEngine; using System.Net; using System.Net.Sockets; using System.Threading; using UnityEngine.UI; // <---- 追加1 public class UdpSocket : MonoBehaviour { private string _MulticastAddr = "224.0.23.0"; // マルチキャストアドレス private string _RemoteHost = ""; // 送信相手アドレス private int _SendPort = 3610; // 送信ポート private int _RecvPort = 3610; // 受信ポート private UdpClient _UdpClient; // UDP private IPEndPoint _IpEndPoint; // IPEndPoint private Thread _RecvThread; // 受信スレッド // 接続 public void Connect() { IPAddress grpAddr = IPAddress.Parse(_MulticastAddr); if (_IpEndPoint != null) _IpEndPoint = null; _IpEndPoint = new IPEndPoint(grpAddr, _RecvPort); // マルチキャストグループに参加 Disconnect(); _UdpClient = new UdpClient(_RecvPort); _UdpClient.JoinMulticastGroup(grpAddr); // 受信スレッド生成 _RecvThread = new Thread(ReceiveMulticastThread); _RecvThread.Start(); // ノードプロファイル通知送信 SendNodeProfile(); } // 切断 public void Disconnect() { if (_RecvThread != null) { _RecvThread.Abort(); _RecvThread = null; } if (_UdpClient != null) { IPAddress grpAddr = IPAddress.Parse(_MulticastAddr); _UdpClient.DropMulticastGroup(grpAddr); _UdpClient.Close(); _UdpClient = null; } } // ノードプロファイル通知送信 public void SendNodeProfile() { byte[] pack = BuildNodeProfileInfo(); SendPacket(pack, _MulticastAddr); } // 送信 public void SendPacket(byte[] packet, string host) { _UdpClient.Send(packet, packet.Length, host, _SendPort); } // 受信スレッド public void ReceiveMulticastThread() { byte[] packet; int i = 0; System.Text.StringBuilder s = new System.Text.StringBuilder(); while (true) { packet = _UdpClient.Receive(ref _IpEndPoint); if (packet != null) { // 受信できた! s.Remove(0, s.Length); for (i = 0; i < packet.Length; i++) { s.Append(System.Convert.ToString(packet[i], 16).PadLeft(2, '0')); } Debug.Log(s.ToString()); RecvData = s.ToString(); } { { } } } } private string RecvData = ""; private Text Variable; ** __void Start() { targetText = GameObject.Find("TextLog").GetComponent<Text>().GetComponent<Text>(); } void Update() { bool flg = true; if (flg == false) { targetText.text = RecvData; flg = false;__ }** } Text targetText; // <---- 追加2 // ノードプロファイル通知パケット作成 private byte[] BuildNodeProfileInfo() { byte[] pack; pack = new byte[17]; pack[0] = 0x10; // EHD1 pack[1] = 0x81; // EHD2 pack[2] = 0x00; // pack[3] = 0x01; // ID pack[4] = 0x0E; // 送信元「ノードプロファイルクラス」 pack[5] = 0xF0; // EOJ = 0x0E F0 01 pack[6] = 0x01; // pack[7] = 0x0E; // 送信先「ノードプロファイルクラス」 pack[8] = 0xF0; // EOJ = 0x0E F0 01 pack[9] = 0x01; // pack[10] = 0x73; // ESV pack[11] = 0x01; // OPC pack[12] = 0xD5; // EPC pack[13] = 0x04; // PDC pack[14] = 0x01; // EDT pack[15] = 0x05; // pack[16] = 0xFF; // pack[16] = 0x01; // return pack; } }

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

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

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

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

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

y_waiwai

2018/09/05 07:37

どこのテキストに何を表示するのでしょうか
YAmaGNZ

2018/09/05 07:38

本文とコードを分けて書いてください。
UKAWATAKATO

2018/09/05 07:45

大変申し訳ございません。以下修正いたしました
UKAWATAKATO

2018/09/05 07:46

テキストはUnityでただ表示させるためのテキストです。
YAmaGNZ

2018/09/05 10:27

編集後のプレビューを確認しましょうよ。本文ではなく、コードを```と```の間に書いてください。
UKAWATAKATO

2018/09/06 01:29

分かりました。不慣れで大変申し訳ないです汗
guest

回答2

0

ベストアンサー

表示する時のフラグに関して

1.受信したらtrueにする
2.フラグがtrueだったら表示してfalseにする

です。

ご自身のコードをよく見てください。
flgをTrueにした後に
if文でflgがfalseか判断しても意味がないですよね
ブレイクポイントやステップ実行などを利用して、自分のコードがどのように動作しているか確認しましょう。

投稿2018/09/05 10:33

YAmaGNZ

総合スコア10258

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

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

0

C#

1targetText = GameObject.Find("TextLog").GetComponent<Text>().GetComponent<Text>();

C#

1targetText = GameObject.Find("TextLog").GetComponent<Text>();

に変更してみてください。
これでもエラーが起きるのであれば、"TextLog"というGameObjectが配置されていない、もしくは"TextLog"のGameObjectにTextコンポーネント(スクリプト)がアタッチされていないのではないでしょうか。

投稿2018/09/05 10:25

StudioAres

総合スコア127

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問