프로젝트

일반

사용자정보

통계
| 개정판:

t1 / TFDContents / Assets / KinectDemos / MovieSequenceDemo / Scripts / UserMovieSequence.cs @ 3

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

1
using UnityEngine;
2
using System;
3

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

    
9
	[Tooltip("How far left or right from the camera may be the user, in meters.")]
10
	public float limitLeftRight = 1.2f;
11

    
12
	[Tooltip("GUI texture to display the movie frames.")]
13
	public GUITexture movieGuiTexture = null;
14

    
15
	[Tooltip("Seuqence of frames in the movie (left to right).")]
16
	public Texture[] frameTextures = null;
17

    
18
	[Tooltip("Smooth factor used for frame interpolation.")]
19
	public float smoothFactor = 10f;
20

    
21
	[Tooltip("Current frame number.")]
22
	public int currentFrame = 0;
23

    
24
	[Tooltip("GUI-Text to display status messages.")]
25
	public GUIText statusText = null;
26

    
27

    
28
	private KinectManager kinectManager;
29
	private int numberOfFrames;
30
	private float fCurrentFrame;
31

    
32

    
33

    
34
	void Start()
35
	{
36
		kinectManager = KinectManager.Instance;
37
		numberOfFrames = frameTextures != null ? frameTextures.Length : 0;
38
		fCurrentFrame = 0f;
39
	}
40

    
41
	void Update()
42
	{
43
		if (kinectManager && kinectManager.IsInitialized()) 
44
		{
45
			long userId = kinectManager.GetUserIdByIndex(playerIndex);
46

    
47
			if (kinectManager.IsUserTracked (userId) && kinectManager.IsJointTracked (userId, (int)KinectInterop.JointType.SpineBase)) 
48
			{
49
				Vector3 userPos = kinectManager.GetJointPosition (userId, (int)KinectInterop.JointType.SpineBase);
50

    
51
				if (userPos.x >= -limitLeftRight && userPos.x <= limitLeftRight) 
52
				{
53
					// calculate the relative position in the movie
54
					float relPos = (userPos.x + limitLeftRight) / (2f * limitLeftRight);
55
					fCurrentFrame = (fCurrentFrame != 0f) ? Mathf.Lerp (fCurrentFrame, relPos * (numberOfFrames - 1), smoothFactor * Time.deltaTime) : (relPos * (numberOfFrames - 1));
56

    
57
					// current frame index
58
					currentFrame = Mathf.RoundToInt(fCurrentFrame);
59

    
60
					if (statusText) 
61
					{
62
						statusText.text = string.Format ("X-Pos: {0:F2}, RelPos: {1:F3}, Frame: {2}", userPos.x, relPos, currentFrame);
63
					}
64
				}
65
			} 
66
//			else 
67
//			{
68
//				fCurrentFrame = 0f;
69
//			}
70

    
71
			// display the frame with 'currentFrame' index
72
			if(frameTextures != null && currentFrame >= 0 && currentFrame < frameTextures.Length) 
73
			{
74
				Texture tex = frameTextures[currentFrame];
75

    
76
				if (movieGuiTexture) 
77
				{
78
					movieGuiTexture.texture = tex;
79
				}
80
			}
81

    
82
		}
83
	}
84

    
85
}