t1 / TFDContents / Assets / KinectDemos / VariousDemos / Scripts / UserHeadCamera.cs @ 3
이력 | 보기 | 이력해설 | 다운로드 (2.24 KB)
1 |
using UnityEngine; |
---|---|
2 |
using System.Collections; |
3 |
|
4 |
public class UserHeadCamera : MonoBehaviour |
5 |
{ |
6 |
[Tooltip("Index of the player, tracked by this component. -1 means all players, 0 - the 1st player only, 1 - the 2nd player only, etc.")] |
7 |
public int playerIndex = 0; |
8 |
|
9 |
[Tooltip("Kinect joint used to control the camera.")] |
10 |
public KinectInterop.JointType playerJoint = KinectInterop.JointType.Head; |
11 |
|
12 |
[Tooltip("Whether the camera view is mirrored or not.")] |
13 |
public bool mirroredView = false; |
14 |
|
15 |
[Tooltip("Kinect origin position.")] |
16 |
public Vector3 originPosition = Vector3.zero; |
17 |
|
18 |
[Tooltip("Whether to apply the joint rotation to the camera.")] |
19 |
public bool applyJointRotation = false; |
20 |
|
21 |
[Tooltip("Initial camera rotation.")] |
22 |
public Vector3 initialRotation = Vector3.zero; |
23 |
|
24 |
[Tooltip("Whether the z-movement is inverted or not.")] |
25 |
public bool invertedZMovement = false; |
26 |
|
27 |
[Tooltip("Smooth factor used for the camera orientation.")] |
28 |
public float smoothFactor = 5f; |
29 |
|
30 |
|
31 |
private KinectManager kinectManager = null; |
32 |
private Quaternion initialHeadRot; |
33 |
|
34 |
|
35 |
void Start () |
36 |
{ |
37 |
kinectManager = KinectManager.Instance; |
38 |
initialHeadRot = (mirroredView ? Quaternion.Euler(0f, 180f, 0f) : Quaternion.identity) * Quaternion.Euler(initialRotation); |
39 |
} |
40 |
|
41 |
void Update () |
42 |
{ |
43 |
if(kinectManager && kinectManager.IsInitialized()) |
44 |
{ |
45 |
long userId = kinectManager.GetUserIdByIndex(playerIndex); |
46 |
|
47 |
if(userId != 0 && kinectManager.IsJointTracked(userId, (int)playerJoint)) |
48 |
{ |
49 |
Vector3 headPos = kinectManager.GetJointPosition(userId, (int)playerJoint); |
50 |
if(invertedZMovement) |
51 |
{ |
52 |
headPos.z = -headPos.z; |
53 |
} |
54 |
|
55 |
headPos += originPosition; |
56 |
transform.position = headPos + transform.forward * 0.1f; |
57 |
|
58 |
if(applyJointRotation) |
59 |
{ |
60 |
Quaternion headRot = kinectManager.GetJointOrientation(userId, (int)playerJoint, !mirroredView); |
61 |
|
62 |
Vector3 jointDir = kinectManager.GetJointDirection (userId, (int)playerJoint, mirroredView, invertedZMovement); |
63 |
Quaternion invPitchRot = Quaternion.FromToRotation (jointDir, Vector3.up); |
64 |
headRot = headRot * invPitchRot; |
65 |
|
66 |
transform.rotation = Quaternion.Slerp(transform.rotation, initialHeadRot * headRot, smoothFactor * Time.deltaTime); |
67 |
} |
68 |
} |
69 |
} |
70 |
} |
71 |
} |