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

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

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

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

Unity

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

Q&A

1回答

626閲覧

unity ボタンを押したら、、、

daityann

総合スコア7

C#

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

Unity

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

0グッド

0クリップ

投稿2017/12/19 17:13

編集2017/12/20 05:57

イメージ説明イメージ説明
ボタンがクリックされたら、csvに書き込むようにしたいのですができなくて困っています。
ここ↓ と2か所書いた場所でできると思っていたのですが、なにがおかしいでしょうか?それとも、unityのボタンのほうに原因があるのでしょうか?

c#

1using System.Collections; 2using System.Collections.Generic; 3using UnityEngine; 4using Enflux.SDK.Core; 5using UnityEngine.UI; 6using System; 7using System.Linq; 8using Enflux.Common.DataTypes; 9using Enflux.SDK.Core.Devices; 10using Enflux.SDK.DataTypes; 11using Enflux.SDK.Extensions; 12using Enflux.SDK.Utils; 13using Enflux.Shim.Utils; 14using System.IO; 15 16public class math : MonoBehaviour 17{ 18 // Assign these in the editor. 19 public EnfluxManager EnfluxManager; 20 public Humanoid Humanoid; 21 // Retrieve limb orientations as Unity local space quaternions. 22 private void GetLocalSpaceOrientations() 23 { 24 var chest = Humanoid.LocalOrientations.Chest.Orientation; 25 var leftUpperArm = Humanoid.LocalOrientations.LeftUpperArm.Orientation; 26 var leftLowerArm = Humanoid.LocalOrientations.LeftLowerArm.Orientation; 27 var rightUpperArm = Humanoid.LocalOrientations.RightUpperArm.Orientation; 28 var rightLowerArm = Humanoid.LocalOrientations.RightLowerArm.Orientation; 29 var pelvis = Humanoid.LocalOrientations.Pelvis.Orientation; 30 var leftUpperLeg = Humanoid.LocalOrientations.LeftUpperLeg.Orientation; 31 var leftLowerLeg = Humanoid.LocalOrientations.LeftLowerLeg.Orientation; 32 var rightUpperLeg = Humanoid.LocalOrientations.RightUpperLeg.Orientation; 33 var rightLowerLeg = Humanoid.LocalOrientations.RightLowerLeg.Orientation; 34 } 35 36 // Retrieve limb orientations as real world NED (North-East-Down) space quaternions. 37 private string GetNedSpaceOrientations() 38 { 39 40 var chest = EnfluxManager.NedOrientations.Chest.Orientation; 41 var leftUpperArm = EnfluxManager.NedOrientations.LeftUpperArm.Orientation; 42 var leftLowerArm = EnfluxManager.NedOrientations.LeftLowerArm.Orientation; 43 var rightUpperArm = EnfluxManager.NedOrientations.RightUpperArm.Orientation; 44 var rightLowerArm = EnfluxManager.NedOrientations.RightLowerArm.Orientation; 45 var pelvis = EnfluxManager.NedOrientations.Pelvis.Orientation; 46 var leftUpperLeg = EnfluxManager.NedOrientations.LeftUpperLeg.Orientation; 47 var leftLowerLeg = EnfluxManager.NedOrientations.LeftLowerLeg.Orientation; 48 var rightUpperLeg = EnfluxManager.NedOrientations.RightUpperLeg.Orientation; 49 var rightLowerLeg = EnfluxManager.NedOrientations.RightLowerLeg.Orientation; 50 51 52 return "胸 " + chest + "\n左肘 " + leftUpperArm + "\n左手首 " + leftLowerArm + "\n右肘 " + rightUpperArm + "\n右手首 " + rightLowerArm + 53 "\n腰 " + pelvis + "\n左膝 " + leftUpperLeg + "\n左足首 " + leftLowerLeg + "\n右膝 " + rightUpperLeg + "\n右足首 " + rightLowerLeg + "\n\n"; 54 } 55 56 //時間 57 void FindSundayOfTheWeek() 58 { 59 System.DateTime work = System.DateTime.Now; 60 Debug.Log(work.ToString()); 61 } 62 63 //書き出し準備 64 private int i = 1; 65 StreamWriter sw; 66 FileInfo fi; 67 68 69 bool aa; 70 public void Push() 71 { 72 aa = true; 73 } 74 public void noPush() 75 { 76 aa = false; 77 } 78 79 void Start() 80 { 81 82 FindSundayOfTheWeek(); 83 84 //ファイル準備 85 fi = new FileInfo(Application.dataPath + "/" + DateTime.Now.ToString("yyyyMMddHHmmss") + ".csv"); 86 sw = fi.AppendText(); 87 88 } 89 90 private float timeleft; 91 int log; 92 93 void Update() 94 { 95 96 if (i > 10000) 97 { 98 sw.Close(); 99 return; 100 } 101 timeleft -= Time.deltaTime; 102 if (timeleft <= 0.0) 103 { 104 timeleft = 1.0f; 105 106 //処理 107 Debug.Log(GetNedSpaceOrientations()); 108 this.GetComponent<Text>().text = GetNedSpaceOrientations(); 109 110 //書き出す 111 112 sw.WriteLine(GetNedSpaceOrientations()); 113 sw.Flush(); 114 115 i++; 116 } 117 } 118}

c#

1using System.Collections; 2using System.Collections.Generic; 3using UnityEngine; 4using Enflux.SDK.Core; 5using UnityEngine.UI; 6using System; 7using System.Linq; 8using Enflux.Common.DataTypes; 9using Enflux.SDK.Core.Devices; 10using Enflux.SDK.DataTypes; 11using Enflux.SDK.Extensions; 12using Enflux.SDK.Utils; 13using Enflux.Shim.Utils; 14using System.IO; 15 16public class math : MonoBehaviour 17{ 18 // Assign these in the editor. 19 public EnfluxManager EnfluxManager; 20 public Humanoid Humanoid; 21 // Retrieve limb orientations as Unity local space quaternions. 22 private void GetLocalSpaceOrientations() 23 { 24 var chest = Humanoid.LocalOrientations.Chest.Orientation; 25 var leftUpperArm = Humanoid.LocalOrientations.LeftUpperArm.Orientation; 26 var leftLowerArm = Humanoid.LocalOrientations.LeftLowerArm.Orientation; 27 var rightUpperArm = Humanoid.LocalOrientations.RightUpperArm.Orientation; 28 var rightLowerArm = Humanoid.LocalOrientations.RightLowerArm.Orientation; 29 var pelvis = Humanoid.LocalOrientations.Pelvis.Orientation; 30 var leftUpperLeg = Humanoid.LocalOrientations.LeftUpperLeg.Orientation; 31 var leftLowerLeg = Humanoid.LocalOrientations.LeftLowerLeg.Orientation; 32 var rightUpperLeg = Humanoid.LocalOrientations.RightUpperLeg.Orientation; 33 var rightLowerLeg = Humanoid.LocalOrientations.RightLowerLeg.Orientation; 34 } 35 36 // Retrieve limb orientations as real world NED (North-East-Down) space quaternions. 37 private string GetNedSpaceOrientations() 38 { 39 var chest = EnfluxManager.NedOrientations.Chest.Orientation; 40 var leftUpperArm = EnfluxManager.NedOrientations.LeftUpperArm.Orientation; 41 var leftLowerArm = EnfluxManager.NedOrientations.LeftLowerArm.Orientation; 42 var rightUpperArm = EnfluxManager.NedOrientations.RightUpperArm.Orientation; 43 var rightLowerArm = EnfluxManager.NedOrientations.RightLowerArm.Orientation; 44 var pelvis = EnfluxManager.NedOrientations.Pelvis.Orientation; 45 var leftUpperLeg = EnfluxManager.NedOrientations.LeftUpperLeg.Orientation; 46 var leftLowerLeg = EnfluxManager.NedOrientations.LeftLowerLeg.Orientation; 47 var rightUpperLeg = EnfluxManager.NedOrientations.RightUpperLeg.Orientation; 48 var rightLowerLeg = EnfluxManager.NedOrientations.RightLowerLeg.Orientation; 49 50 51 return "胸 " + chest + "\n左肘 " + leftUpperArm + "\n左手首 " + leftLowerArm + "\n右肘 " + rightUpperArm + "\n右手首 " + rightLowerArm + 52 "\n腰 " + pelvis + "\n左膝 " + leftUpperLeg + "\n左足首 " + leftLowerLeg + "\n右膝 " + rightUpperLeg + "\n右足首 " + rightLowerLeg + "\n\n"; 53 } 54 55 //時間 56 void FindSundayOfTheWeek() 57 { 58 System.DateTime work = System.DateTime.Now; 59 Debug.Log(work.ToString()); 60 } 61 62 //書き出し準備 63 private int i = 1; 64 StreamWriter sw; 65 FileInfo fi; 66 67 int x = 0; 68 public void OnClick() 69 { 70 x++; 71 Debug.Log(x); 72 Debug.Log("Button click!"); 73 } 74 75void Start() 76 { 77 78 FindSundayOfTheWeek(); 79 80 //ファイル準備 81 fi = new FileInfo(Application.dataPath + "/" + DateTime.Now.ToString("yyyyMMddHHmmss") + ".csv"); 82 sw = fi.AppendText(); 83 84 } 85 86 private float timeleft; 87 int log; 88 89 void Update() 90 { 91 if (i > 10000) 92 { 93 sw.Close(); 94 return; 95 } 96 timeleft -= Time.deltaTime; 97 if (timeleft <= 0.0) 98 { 99 timeleft = 1.0f; 100 101 //処理 102 Debug.Log(GetNedSpaceOrientations()); 103 this.GetComponent<Text>().text = GetNedSpaceOrientations(); 104 105 //書き出す 106 107 sw.WriteLine(GetNedSpaceOrientations()); 108 sw.Flush(); 109 110 i++; 111 } 112 } 113 } 114

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

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

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

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

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

moscow3

2017/12/19 17:39

あまりにコードが見にくいので、マークダウンでコード形式にして書くことをおすすめします。
daityann

2017/12/19 18:14

編集しました。できれば回答お願いします。
Zuishin

2017/12/20 00:18

エラーメッセージがありません。
daityann

2017/12/20 00:21

エラーメッセージは出てないのですが。
Zuishin

2017/12/20 00:51

出ていないなら出ていないと書きましょう。「できません」で済ませていいのははおじいさんおばあさんです。具体的にどうなるのかという記述がありません。以上を「エラーメッセージがありません」の一言で理解できると思っていました。
daityann

2017/12/20 04:03

すみません。現在ボタンをクリックした際に書き込みをしたいのですが、On Click時に書き込みをしたいと考えています。しかし、ボタンを押しても変化がないのと、下記で指摘していただいているno functionのところでつまずいています。
guest

回答1

0

現在のボタン設定がスクリーンショットの通りだとすると、何のメソッドも呼ばれません。
(No Function=何も登録されていない)
なのでコードが正しくても動かないのは当然、というのが1点。

更にコードの方、Update()内ですが、
iの値が初期値(1)のまま変更されていないので、if (i > 10000)以降に入りません。
また、入ったとしても2行後にreturnしているので、書き込み処理に絶対到達しないようになっています。

もっというとこの構成だと、1フレーム毎に書き出しされる可能性がある・Close処理が恐らく正しく行われない・負荷が高い状態です。
if文の組み方を考え直すか、Update()ではなくPush()メソッド内に書き出し処理をそのまま記載すればいいのでは?


2017/12/20 13:00 コメントを受けて追記

C#

1 public void Push() 2 { 3 //処理 4 Debug.Log(GetNedSpaceOrientations()); 5 this.GetComponent<Text>().text = GetNedSpaceOrientations(); 6 7 //書き出す 8 sw.WriteLine(GetNedSpaceOrientations()); 9 sw.Flush(); 10 }

上と同じことを書きますが、こんな感じでPushメソッド内に書き出し処理を入れて
ボタンのOnClickイベント(今No Functionになっているところ)で「Push」メソッドを選択すれば動作するのではないかと思います。
(ファイルを閉じる処理をどこで行うべきかは要件や仕様によるので入れていないです)

まずはボタンの基本的な使い方を学習した方がいいかもしれません。
【uGUI】Buttonの使い方 - Qiita

ファイル書き出しのソースコードは精査していませんが、強いて言うならCSVなのに改行区切り?と思います。空行も含むようになっていますし。
ログとして出したいだけ、テストとして今はこう書いている、というなら問題無いのですが少し気になりました。

投稿2017/12/20 00:38

編集2017/12/20 04:01
sakura_hana

総合スコア11427

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

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

daityann

2017/12/20 03:46

回答ありがとうございます。 No Functionの件ですが赤いボタンを押したときに書き込まれるようにしたいのですが、何を入れるのがいいのかよくわからなくて。 あと、プログラムの書き込み処理の件ですが、こちらは解決したと思いますが、プログラム改善するなら何処を直したらいいですか?
sakura_hana

2017/12/20 04:02

回答を編集しました。
daityann

2017/12/20 05:56

編集しましたがエラーが起こっています。エラー部は写真の通りです
sakura_hana

2017/12/20 06:40

>ボタンについて Debug.Log("Button click!");は表示されていますか? もしされていないなら、リンク先のページを見ながらもう一度設定を行ってください。 >エラーについて エラーが出た時はエラー文をそのまま検索しましょう。 「IOException: Sharing violation on path」で検索すると以下のような情報がヒットします。 http://kamikuzu-tips.blogspot.jp/2015/10/csv.html もし改善しない場合は自分で調べてください。 2番目のエラーは this.GetComponent<Text>().text = GetNedSpaceOrientations(); に問題があります。「このスクリプトが付いているGameObjectにTextコンポーネントが付いていない」ことが原因です。この行をコメントアウトするか、Textコンポーネントを付けてください。 3番目のエラーは sw.WriteLine(GetNedSpaceOrientations()); に問題があります。 Updateは最初の1回はStartよりも早く発動する為、Start内の「sw = fi.AppendText();」が呼ばれるより前に「sw.WriteLine〜」が呼ばれているものと思われます。 if (sw != null) { sw.WriteLine(GetNedSpaceOrientations()); sw.Flush(); } こうすれば恐らくエラーは消えます。 >ソースコードについて 自分で書いたスクリプトが何をしているのか、理解していますか? このコードだと「1秒毎に書き出し、1万回書き出ししたらファイルを閉じる」 「ボタンを押す度xが加算される(そのxは他のどこにも使われていない)」という処理になります。 ちなみに私が回答として追記したコードを使えば、Update内の処理は全て不要になります。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

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

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

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問