프로젝트

일반

사용자정보

통계
| 개정판:

t1 / TFDContents / Assets / KinectScripts / Samples / GetJointPositionDemo.cs @ 3

이력 | 보기 | 이력해설 | 다운로드 (2.55 KB)

1
using UnityEngine;
2
using System.Collections;
3
using System.IO;
4

    
5
public class GetJointPositionDemo : MonoBehaviour 
6
{
7
	[Tooltip("Index of the player, tracked by this component. 0 means the 1st player, 1 - the 2nd one, 2 - the 3rd one, etc.")]
8
	public int playerIndex = 0;
9

    
10
	[Tooltip("The Kinect joint we want to track.")]
11
	public KinectInterop.JointType joint = KinectInterop.JointType.HandRight;
12

    
13
	[Tooltip("Current joint position in Kinect coordinates (meters).")]
14
	public Vector3 jointPosition;
15

    
16
	[Tooltip("Whether we save the joint data to a CSV file or not.")]
17
	public bool isSaving = false;
18

    
19
	[Tooltip("Path to the CSV file, we want to save the joint data to.")]
20
	public string saveFilePath = "joint_pos.csv";
21
	
22
	[Tooltip("How many seconds to save data to the CSV file, or 0 to save non-stop.")]
23
	public float secondsToSave = 0f;
24

    
25

    
26
	// start time of data saving to csv file
27
	private float saveStartTime = -1f;
28

    
29

    
30
	void Start()
31
	{
32
		if(isSaving && File.Exists(saveFilePath))
33
		{
34
			File.Delete(saveFilePath);
35
		}
36
	}
37

    
38

    
39
	void Update() 
40
	{
41
		if(isSaving)
42
		{
43
			// create the file, if needed
44
			if(!File.Exists(saveFilePath))
45
			{
46
				using(StreamWriter writer = File.CreateText(saveFilePath))
47
				{
48
					// csv file header
49
					string sLine = "time,joint,pos_x,pos_y,poz_z";
50
					writer.WriteLine(sLine);
51
				}
52
			}
53

    
54
			// check the start time
55
			if(saveStartTime < 0f)
56
			{
57
				saveStartTime = Time.time;
58
			}
59
		}
60

    
61
		// get the joint position
62
		KinectManager manager = KinectManager.Instance;
63

    
64
		if(manager && manager.IsInitialized())
65
		{
66
			if(manager.IsUserDetected(playerIndex))
67
			{
68
				long userId = manager.GetUserIdByIndex(playerIndex);
69

    
70
				if(manager.IsJointTracked(userId, (int)joint))
71
				{
72
					// output the joint position for easy tracking
73
					Vector3 jointPos = manager.GetJointPosition(userId, (int)joint);
74
					jointPosition = jointPos;
75

    
76
					if(isSaving)
77
					{
78
						if((secondsToSave == 0f) || ((Time.time - saveStartTime) <= secondsToSave))
79
						{
80
#if !UNITY_WSA
81
							using(StreamWriter writer = File.AppendText(saveFilePath))
82
							{
83
								string sLine = string.Format("{0:F3},{1},{2:F3},{3:F3},{4:F3}", Time.time, ((KinectInterop.JointType)joint).ToString(), jointPos.x, jointPos.y, jointPos.z);
84
								writer.WriteLine(sLine);
85
							}
86
#else
87
							string sLine = string.Format("{0:F3},{1},{2:F3},{3:F3},{4:F3}", Time.time, ((KinectInterop.JointType)joint).ToString(), jointPos.x, jointPos.y, jointPos.z);
88
							Debug.Log(sLine);
89
#endif
90
						}
91
					}
92
				}
93
			}
94
		}
95

    
96
	}
97

    
98
}