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

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

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

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

Unity3D

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

Unity

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

Kinect

Kinect(キネクト)はマイクロソフトから発売されたジェスチャー・音声認識によって 操作ができるデバイスです。

Q&A

0回答

511閲覧

UnityとKinect V2 の連動で消したいオブジェクト

naochan1214

総合スコア16

C#

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

Unity3D

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

Unity

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

Kinect

Kinect(キネクト)はマイクロソフトから発売されたジェスチャー・音声認識によって 操作ができるデバイスです。

0グッド

0クリップ

投稿2019/06/03 05:42

前提・実現したいこと

以下のサイトを参考にしてKinectの関節座標周りに小さいキューブを生成しているのですが、どうしてもリンクの下にある画像の様に最初に生成したキューブが消えません。

参考にしたサイト
UnityでKinect v2から関節座標値を取得し、Cubeを動かす

実行前の状態の画像
イメージ説明

Kinectが関節座標を取得しているときの画像
イメージ説明

試したこと

Start()にて、Kinectのセンサーが起動する前にSetActive (false)を行ってたり、いっその事キューブ本体のScaleをすべて0にしましたが、それでは関節座標を取得しても小さなキューブが生成されません。

キューブのスクリプト

C#

1using System; 2using System.Collections; 3using System.Collections.Generic; 4using UnityEngine; 5using Windows.Kinect; 6 7public class ri : MonoBehaviour 8{ 9 Windows.Kinect.KinectSensor _Sensor;//オブジェクト取得のためのセンサー 10 Windows.Kinect.BodyFrameReader _Reader; 11 Windows.Kinect.Body[] _Data = null;//Kinectが認識する人を一人ずつ詰めた配列 12 13 int JumpLine = 0;//ジャンプのライン 14 bool JumpLinein = false;//ジャンプラインが入っているかどうか? 15 16 List<Transform> tt = new List<Transform>(); 17 18 void Start() 19 { 20 21 _Sensor = Windows.Kinect.KinectSensor.GetDefault(); 22 if (_Sensor != null) 23 { 24 _Reader = _Sensor.BodyFrameSource.OpenReader(); 25 if (!_Sensor.IsOpen) 26 { 27 _Sensor.Open(); 28 } 29 } 30 } 31 32 static Vector3 GetVector3FromJoint(Windows.Kinect.Joint joint) 33 { 34 return new Vector3(joint.Position.X, joint.Position.Y, joint.Position.Z); 35 } 36 37 void RefreshBodyObject(Windows.Kinect.Body body) 38 { 39 bool isGen = false; 40 if (tt.Count - 1 != (int)Windows.Kinect.JointType.ThumbRight) 41 { 42 tt.Clear(); 43 isGen = true; 44 print("ボーンを生成します."); 45 print(""); 46 } 47 48 for (Windows.Kinect.JointType jt = Windows.Kinect.JointType.SpineBase; jt <= Windows.Kinect.JointType.ThumbRight; jt++) 49 { 50 Windows.Kinect.Joint sourceJoint = body.Joints[jt]; 51 Vector3 tmp = GetVector3FromJoint(sourceJoint) * 20; 52 if (isGen) 53 { 54 var t = GameObject.CreatePrimitive(PrimitiveType.Cube).transform; 55 t.name = jt.ToString(); 56 t.position = tmp; 57 t.parent = transform; 58 Destroy(t.GetComponent<BoxCollider>()); 59 tt.Add(t); 60 61 } 62 else 63 { 64 Transform t = tt[(int)jt]; 65 if (sourceJoint.TrackingState == Windows.Kinect.TrackingState.Tracked) 66 { 67 t.position = tmp; 68 //t.gameObject.SetActive(true); 69 } 70 else 71 { 72 //t.gameObject.SetActive(false); 73 } 74 } 75 } 76 } 77 78 void Update() 79 { 80 var frame = _Reader.AcquireLatestFrame(); 81 if (frame == null) 82 { 83 return; 84 } 85 if (_Data == null) 86 { 87 _Data = new Windows.Kinect.Body[_Sensor.BodyFrameSource.BodyCount]; 88 } 89 frame.GetAndRefreshBodyData(_Data); 90 frame.Dispose(); 91 frame = null; 92 93 if (_Data == null) 94 { 95 return; 96 } 97 98 // ここのデータには何が入っているかよくわからない。1人しか映っていなくても、配列の長さは6だった。多分数フレーム分のデータが入っている? 99 foreach (var body in _Data) 100 { 101 if (body == null) 102 { 103 continue; 104 } 105 if (body.IsTracked) 106 { 107 RefreshBodyObject(body); 108 break; // とりあえず、一回でもRefreshBodyObjectが呼ばれたらbreak; 109 } 110 } 111 foreach (JointType jointType in Enum.GetValues(typeof(JointType))) 112 { 113 if (jointType.ToString() == "Head") 114 { 115 print("頭だよ"); 116 } 117 } 118 } 119 120 void OnApplicationQuit() 121 { 122 if (_Reader != null) 123 { 124 _Reader.Dispose(); 125 _Reader = null; 126 } 127 if (_Sensor != null) 128 { 129 if (_Sensor.IsOpen) 130 { 131 _Sensor.Close(); 132 } 133 _Sensor = null; 134 } 135 } 136 137} 138

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

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

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

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

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

sakura_hana

2019/06/03 12:11

「最初に生成したキューブ」はどのように生成したオブジェクトでしょうか? もし自分の手でシーン上に作ったオブジェクトや、他のスクリプトで生成したオブジェクトなら(このスクリプト内でそれを取得している様子も消える命令も無いので)当然消えません。逆に言えば、何らかの方法で対象のオブジェクトを取得し、削除する命令を書けば消えます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだ回答がついていません

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

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

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問