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

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

ただいまの
回答率

91.05%

  • C#

    5528questions

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

  • Unity

    2795questions

    Unityは、ユニティテクノロジーが開発したゲームエンジンです。 主にモバイルやブラウザ向けのゲーム製作に利用されていましたが、3Dの重力付きゲームが簡単に作成できることから需要が増え、現在はマルチプラットフォームに対応しています。 言語はC言語/C++で書かれていますが、C#、JavaScript、Booで書かれたコードにも対応しています。

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

受付中

回答 1

投稿 編集

  • 評価
  • クリップ 0
  • VIEW 185

daityann

score 1

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

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using Enflux.SDK.Core;
using UnityEngine.UI;
using System;
using System.Linq;
using Enflux.Common.DataTypes;
using Enflux.SDK.Core.Devices;
using Enflux.SDK.DataTypes;
using Enflux.SDK.Extensions;
using Enflux.SDK.Utils;
using Enflux.Shim.Utils;
using System.IO;

public class math : MonoBehaviour
{
    // Assign these in the editor.
    public EnfluxManager EnfluxManager;
    public Humanoid Humanoid;
    // Retrieve limb orientations as Unity local space quaternions.
    private void GetLocalSpaceOrientations()
    {
        var chest = Humanoid.LocalOrientations.Chest.Orientation;
        var leftUpperArm = Humanoid.LocalOrientations.LeftUpperArm.Orientation;
        var leftLowerArm = Humanoid.LocalOrientations.LeftLowerArm.Orientation;
        var rightUpperArm = Humanoid.LocalOrientations.RightUpperArm.Orientation;
        var rightLowerArm = Humanoid.LocalOrientations.RightLowerArm.Orientation;
        var pelvis = Humanoid.LocalOrientations.Pelvis.Orientation;
        var leftUpperLeg = Humanoid.LocalOrientations.LeftUpperLeg.Orientation;
        var leftLowerLeg = Humanoid.LocalOrientations.LeftLowerLeg.Orientation;
        var rightUpperLeg = Humanoid.LocalOrientations.RightUpperLeg.Orientation;
        var rightLowerLeg = Humanoid.LocalOrientations.RightLowerLeg.Orientation;
    }

    // Retrieve limb orientations as real world NED (North-East-Down) space quaternions.
    private string GetNedSpaceOrientations()
    {

        var chest = EnfluxManager.NedOrientations.Chest.Orientation;
        var leftUpperArm = EnfluxManager.NedOrientations.LeftUpperArm.Orientation;
        var leftLowerArm = EnfluxManager.NedOrientations.LeftLowerArm.Orientation;
        var rightUpperArm = EnfluxManager.NedOrientations.RightUpperArm.Orientation;
        var rightLowerArm = EnfluxManager.NedOrientations.RightLowerArm.Orientation;
        var pelvis = EnfluxManager.NedOrientations.Pelvis.Orientation;
        var leftUpperLeg = EnfluxManager.NedOrientations.LeftUpperLeg.Orientation;
        var leftLowerLeg = EnfluxManager.NedOrientations.LeftLowerLeg.Orientation;
        var rightUpperLeg = EnfluxManager.NedOrientations.RightUpperLeg.Orientation;
        var rightLowerLeg = EnfluxManager.NedOrientations.RightLowerLeg.Orientation;


        return "胸 " + chest + "\n左肘 " + leftUpperArm + "\n左手首 " + leftLowerArm + "\n右肘 " + rightUpperArm + "\n右手首 " + rightLowerArm +
            "\n腰 " + pelvis + "\n左膝 " + leftUpperLeg + "\n左足首 " + leftLowerLeg + "\n右膝 " + rightUpperLeg + "\n右足首 " + rightLowerLeg + "\n\n";
    }

    //時間
    void FindSundayOfTheWeek()
    {
        System.DateTime work = System.DateTime.Now;
        Debug.Log(work.ToString());
    }

    //書き出し準備
    private int i = 1;
    StreamWriter sw;
    FileInfo fi;


    bool aa;
    public void Push()
    {
        aa = true;
    }
    public void noPush()
    {
        aa = false;
    }

    void Start()
    {

        FindSundayOfTheWeek();

        //ファイル準備
        fi = new FileInfo(Application.dataPath + "/" + DateTime.Now.ToString("yyyyMMddHHmmss") + ".csv");
        sw = fi.AppendText();

    }

    private float timeleft;
    int log;

    void Update()
    {

        if (i > 10000)
        {
            sw.Close();
            return;
        }
        timeleft -= Time.deltaTime;
        if (timeleft <= 0.0)
        {
            timeleft = 1.0f;

            //処理
            Debug.Log(GetNedSpaceOrientations());
            this.GetComponent<Text>().text = GetNedSpaceOrientations();

            //書き出す

            sw.WriteLine(GetNedSpaceOrientations());
            sw.Flush();

            i++;
        }
    }
}
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using Enflux.SDK.Core;
using UnityEngine.UI;
using System;
using System.Linq;
using Enflux.Common.DataTypes;
using Enflux.SDK.Core.Devices;
using Enflux.SDK.DataTypes;
using Enflux.SDK.Extensions;
using Enflux.SDK.Utils;
using Enflux.Shim.Utils;
using System.IO;

public class math : MonoBehaviour
{
    // Assign these in the editor.
    public EnfluxManager EnfluxManager;
    public Humanoid Humanoid;
    // Retrieve limb orientations as Unity local space quaternions.
    private void GetLocalSpaceOrientations()
    {
        var chest = Humanoid.LocalOrientations.Chest.Orientation;
        var leftUpperArm = Humanoid.LocalOrientations.LeftUpperArm.Orientation;
        var leftLowerArm = Humanoid.LocalOrientations.LeftLowerArm.Orientation;
        var rightUpperArm = Humanoid.LocalOrientations.RightUpperArm.Orientation;
        var rightLowerArm = Humanoid.LocalOrientations.RightLowerArm.Orientation;
        var pelvis = Humanoid.LocalOrientations.Pelvis.Orientation;
        var leftUpperLeg = Humanoid.LocalOrientations.LeftUpperLeg.Orientation;
        var leftLowerLeg = Humanoid.LocalOrientations.LeftLowerLeg.Orientation;
        var rightUpperLeg = Humanoid.LocalOrientations.RightUpperLeg.Orientation;
        var rightLowerLeg = Humanoid.LocalOrientations.RightLowerLeg.Orientation;
    }

    // Retrieve limb orientations as real world NED (North-East-Down) space quaternions.
    private string GetNedSpaceOrientations()
    {
        var chest = EnfluxManager.NedOrientations.Chest.Orientation;
        var leftUpperArm = EnfluxManager.NedOrientations.LeftUpperArm.Orientation;
        var leftLowerArm = EnfluxManager.NedOrientations.LeftLowerArm.Orientation;
        var rightUpperArm = EnfluxManager.NedOrientations.RightUpperArm.Orientation;
        var rightLowerArm = EnfluxManager.NedOrientations.RightLowerArm.Orientation;
        var pelvis = EnfluxManager.NedOrientations.Pelvis.Orientation;
        var leftUpperLeg = EnfluxManager.NedOrientations.LeftUpperLeg.Orientation;
        var leftLowerLeg = EnfluxManager.NedOrientations.LeftLowerLeg.Orientation;
        var rightUpperLeg = EnfluxManager.NedOrientations.RightUpperLeg.Orientation;
        var rightLowerLeg = EnfluxManager.NedOrientations.RightLowerLeg.Orientation;


        return "胸 " + chest + "\n左肘 " + leftUpperArm + "\n左手首 " + leftLowerArm + "\n右肘 " + rightUpperArm + "\n右手首 " + rightLowerArm +
            "\n腰 " + pelvis + "\n左膝 " + leftUpperLeg + "\n左足首 " + leftLowerLeg + "\n右膝 " + rightUpperLeg + "\n右足首 " + rightLowerLeg + "\n\n";
    }

    //時間
    void FindSundayOfTheWeek()
    {
        System.DateTime work = System.DateTime.Now;
        Debug.Log(work.ToString());
    }

    //書き出し準備
    private int i = 1;
    StreamWriter sw;
    FileInfo fi;

    int x = 0;
    public void OnClick()
    {
        x++;
        Debug.Log(x);
        Debug.Log("Button click!");
    }

void Start()
    {

        FindSundayOfTheWeek();

        //ファイル準備
        fi = new FileInfo(Application.dataPath + "/" + DateTime.Now.ToString("yyyyMMddHHmmss") + ".csv");
        sw = fi.AppendText();

    }

    private float timeleft;
    int log;

    void Update()
    {
            if (i > 10000)
            {
                sw.Close();
                return;
            }
            timeleft -= Time.deltaTime;
            if (timeleft <= 0.0)
            {
                timeleft = 1.0f;

                //処理
                Debug.Log(GetNedSpaceOrientations());
                this.GetComponent<Text>().text = GetNedSpaceOrientations();

                //書き出す

                sw.WriteLine(GetNedSpaceOrientations());
                sw.Flush();

                i++;
            }
        }
    }
  • 気になる質問をクリップする

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

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

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

質問への追記・修正、ベストアンサー選択の依頼

  • daityann

    2017/12/20 09:21

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

    キャンセル

  • Zuishin

    2017/12/20 09:51

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

    キャンセル

  • daityann

    2017/12/20 13:03

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

    キャンセル

回答 1

0

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

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

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


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

    public void Push()
    {
            //処理
            Debug.Log(GetNedSpaceOrientations());
            this.GetComponent<Text>().text = GetNedSpaceOrientations();

            //書き出す
            sw.WriteLine(GetNedSpaceOrientations());
            sw.Flush();
    }


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

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

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

投稿

編集

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2017/12/20 12:46

    回答ありがとうございます。
    No Functionの件ですが赤いボタンを押したときに書き込まれるようにしたいのですが、何を入れるのがいいのかよくわからなくて。

    あと、プログラムの書き込み処理の件ですが、こちらは解決したと思いますが、プログラム改善するなら何処を直したらいいですか?

    キャンセル

  • 2017/12/20 13:02

    回答を編集しました。

    キャンセル

  • 2017/12/20 14:56

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

    キャンセル

  • 2017/12/20 15: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内の処理は全て不要になります。

    キャンセル

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

  • ただいまの回答率 91.05%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

関連した質問

同じタグがついた質問を見る

  • C#

    5528questions

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

  • Unity

    2795questions

    Unityは、ユニティテクノロジーが開発したゲームエンジンです。 主にモバイルやブラウザ向けのゲーム製作に利用されていましたが、3Dの重力付きゲームが簡単に作成できることから需要が増え、現在はマルチプラットフォームに対応しています。 言語はC言語/C++で書かれていますが、C#、JavaScript、Booで書かれたコードにも対応しています。