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

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

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

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

Unity3D

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

Unity

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

Q&A

解決済

2回答

2172閲覧

Unity UDP通信でスライダーの値を送信・受信

BigMaM

総合スコア2

C#

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

Unity3D

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

Unity

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

0グッド

0クリップ

投稿2023/01/30 07:34

編集2023/01/31 01:19

前提

Unityでスライダーを動かすことによって別のシーンの物体を動かすことを考えております.
通信方法はUDP通信を使用しようと考えております.
UnityでUDP通信を実現するためのプログラムはサイトから引用させていただきました.
しかし,スライダーの値をUDP通信で送信して,別のシーンで受信するプログラムが組めずに悩んでおります.
オブジェクトを動かすプログラムは別で作成しました.

Unityのスライダーの数値を送信するためのプログラムを教えていただきたいです.
現在のプログラムは下記のサイトから変わっておりません.

実現したいこと

[1]UnityでUDP通信を用いてスライダーの値を送信する.
[2]別のシーンかプロジェクトで受信をして,オブジェクトを動かす.

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

該当のソースコード

using UnityEngine;
using System.Net.Sockets;
using System.Text;
using UnityEngine.UI;

public class UDPClient : MonoBehaviour
{
// broadcast address
public string host = "127.0.0.1";
public int port = 3333;
private UdpClient client;

//UI public Slider slider_0; public Slider slider_1; public Slider slider_2; public Slider slider_3; public Slider slider_4; public Slider slider_5; public Text postext_0; public Text postext_1; public Text postext_2; public Text postext_3; public Text postext_4; public Text postext_5; public float levelvalue_0; public float levelvalue_1; public float levelvalue_2; public float levelvalue_3; public float levelvalue_4; public float levelvalue_5; void Start() { client = new UdpClient(); client.Connect(host, port); } void Update() { levelvalue_0 = slider_0.value; levelvalue_1 = slider_1.value; levelvalue_2 = slider_2.value; levelvalue_3 = slider_3.value; levelvalue_4 = slider_4.value; levelvalue_5 = slider_5.value; postext_0.text = levelvalue_0.ToString("f2"); postext_1.text = levelvalue_1.ToString("f2"); postext_2.text = levelvalue_2.ToString("f2"); postext_3.text = levelvalue_3.ToString("f2"); postext_4.text = levelvalue_4.ToString("f2"); postext_5.text = levelvalue_5.ToString("f2"); byte[] date_0 = Encoding.UTF8.GetBytes(postext_0.text); byte[] date_1 = Encoding.UTF8.GetBytes(postext_1.text); byte[] date_2 = Encoding.UTF8.GetBytes(postext_2.text); byte[] date_3 = Encoding.UTF8.GetBytes(postext_3.text); byte[] date_4 = Encoding.UTF8.GetBytes(postext_4.text); byte[] date_5 = Encoding.UTF8.GetBytes(postext_5.text); client.Send(date_0, date_0.Length); client.Send(date_1, date_1.Length); client.Send(date_2, date_2.Length); client.Send(date_3, date_3.Length); client.Send(date_4, date_4.Length); client.Send(date_5, date_5.Length); }

}

試したこと

参考にしたサイト
UnityでUDPを送信してみる.-Qiita
https://qiita.com/nenjiru/items/d9c4e8a22601deb0425b

UnityでUDPを受信してみる.-Qiita
https://qiita.com/nenjiru/items/8fa8dfb27f55c0205651

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

Unity2019.4.40

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

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

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

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

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

y_waiwai

2023/01/30 07:57

その参考にしたというサイト通りに、送信し、受信できているのでしょうか。 そもそもそれができていないと成り立たないはなしですが。
BigMaM

2023/01/30 08:37

サイト通りにプログラムを組み,ボタンを押すとHelloの文字が出力されたため送受信できているのではないかと判断しました.
y_waiwai

2023/01/30 09:40

ならスライダーの値を文字列にして送信したら、それがきちんと受信できるでしょうか
AbeTakashi

2023/01/31 00:30 編集

スライダーの値をそのプログラムにどう渡してるかが肝だと思いますので、その部分のソースコードを記載すべきかと思います(まずは自分で考えてみて、動かなくてもいいから頑張って書いてみるところから)。
BigMaM

2023/01/31 01:27

ーTo y_waiwai様 追記したプログラムを実行したところ,数値を受け取ることに成功しました. プログラムの分量が多いのは私の知識不足であり,改善点であると考えております. ーTo AbeTakashi様 プログラムを追記させていただきました. 現状はプログラムにText状態で送っています. ここから別のプロジェクトのオブジェクトを移動させたいです. なにか改善策がございましたらお願いいたします. 受信のプログラムは何も変更しておりません.
guest

回答2

0

自己解決

参考にしたプログラムのポート番号が一致しておらず正常に通信を行えておりませんでした.
ポート番号を修正したところ通信が行えたため自己解決とさせていただきます.

投稿2023/02/03 02:57

BigMaM

総合スコア2

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

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

0

現状はプログラムにText状態で送っています.

この時点で不適切です。

そもそも、TextはUIコンポーネントであり、文字列以外の情報も含まれています。
対して、Encoding.UTF8.GetBytesは文字列をバイト列に変換するものです。
したがって、TextをEncoding.UTF8.GetBytesで変換することは不可能です。

Slider.valueでスライダーの現在の数値が取得できるので、それを文字列にしましょう。
(解説はしませんが、数値自体をBitConverterなどでバイト列に変換する方法もあります)

投稿2023/01/31 03:00

fiveHundred

総合スコア9797

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

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

BigMaM

2023/01/31 05:42

不適切な発言申し訳ございません. 以下のプログラムでSlider.valueをstring型に変更してdate_0に代入する形でいいのでしょうか. levelvalue_0 = slider_0.value; postext_0.text = levelvalue_0.ToString("f2"); byte[] date_0 = Encoding.UTF8.GetBytes(levelvalue_0.ToString());
fiveHundred

2023/01/31 06:24

> 不適切な発言申し訳ございません. 発言が不適切というわけではなくて、やり方が不適切という意味です。 コード自体は特に問題は無さそうに思えます。
BigMaM

2023/01/31 07:13

承知しました.ご助言ありがとうございます. ここから別のプロジェクト同士でUDP通信を行ってSlider.valueを送りたいのですがどのようにすればよいのでしょうか. 何か方法がございましたらご助言お願いできないでしょうか.
fiveHundred

2023/01/31 07:21

そのサイトに書かれている通り、としか言いようがないのですが、どこが分からないのでしょうか?
BigMaM

2023/02/02 11:02

現在実現したいことはUnityの別々のプロジェクト同士でのUDP通信です. 上記のプログラムをそれぞれにアタッチしても送ることができませんでした.
fiveHundred

2023/02/02 12:39

すみませんが、コードは読みましたか? 「string text = Encoding.ASCII.GetString(data);」のtextが受信内容ですから、それを反映したいものに入れればいいだけの話だと思いますが。
BigMaM

2023/02/03 02:54

すみませんでした.解決いたしました.
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問