프로젝트

일반

사용자정보

통계
| 개정판:

t1 / TFDContents / Assets / KinectDemos / GesturesDemo / Scripts / ModelPresentationScript.cs @ 3

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

1 3 KTH
using UnityEngine;
2
using System.Collections;
3
using System.Collections.Generic;
4
5
public class ModelPresentationScript : MonoBehaviour
6
{
7
	[Tooltip("Camera used for screen-to-world calculations. This is usually the main camera.")]
8
	public Camera screenCamera;
9
10
	[Tooltip("Speed of spinning, when presentation slides change.")]
11
	public float spinSpeed = 10;
12
13
	// reference to the gesture listener
14
	private ModelGestureListener gestureListener;
15
16
	// model's initial rotation
17
	private Quaternion initialRotation;
18
19
20
	void Start()
21
	{
22
		// hide mouse cursor
23
		//Cursor.visible = false;
24
25
		// by default set the main-camera to be screen-camera
26
		if (screenCamera == null)
27
		{
28
			screenCamera = Camera.main;
29
		}
30
31
		// get model initial rotation
32
		initialRotation = screenCamera ? Quaternion.Inverse(screenCamera.transform.rotation) * transform.rotation : transform.rotation;
33
34
		// get the gestures listener
35
		gestureListener = ModelGestureListener.Instance;
36
	}
37
38
	void Update()
39
	{
40
		// dont run Update() if there is no gesture listener
41
		if(!gestureListener)
42
			return;
43
44
		if(gestureListener.IsZoomingIn() || gestureListener.IsZoomingOut())
45
		{
46
			// zoom the model
47
			float zoomFactor = gestureListener.GetZoomFactor();
48
49
			Vector3 newLocalScale = new Vector3(zoomFactor, zoomFactor, zoomFactor);
50
			transform.localScale = Vector3.Lerp(transform.localScale, newLocalScale, spinSpeed * Time.deltaTime);
51
		}
52
53
		if(gestureListener.IsTurningWheel())
54
		{
55
			// rotate the model
56
			float turnAngle = Mathf.Clamp(gestureListener.GetWheelAngle(), -30f, 30f);
57
			float updateAngle = Mathf.Lerp(0, turnAngle, spinSpeed * Time.deltaTime);
58
59
			if(screenCamera)
60
				transform.RotateAround(transform.position, screenCamera.transform.TransformDirection(Vector3.up), updateAngle);
61
			else
62
				transform.Rotate(Vector3.up * turnAngle, Space.World);
63
		}
64
65
		if(gestureListener.IsRaiseHand())
66
		{
67
			// reset the model
68
			Vector3 newLocalScale = Vector3.one;
69
			transform.localScale = newLocalScale;
70
71
			transform.rotation = screenCamera ? screenCamera.transform.rotation * initialRotation : initialRotation;
72
		}
73
74
	}
75
76
}