// Update is called once per frame void Update () { RaycastHit hit = new RaycastHit(); Ray r= Camera.main.ScreenPointToRay(Input.mousePosition); Debug.DrawRay(r.origin, r.direction * 1000, Color.red); if (Physics.Raycast(r, out hit, Mathf.Infinity)) { if(hit.collider != null) { if(hit.collider.gameObject.tag == "StreetviewPoint") { StreetView_Pointed = hit.collider.gameObject.GetComponent<StreetviewPoint>(); if(StreetView_Pointed != null) { // TODO : Mouse Enter (SHJO) StreetView_Pointed.gameObject.renderer.material.color=Color.blue; } } else { if(StreetView_Pointed != null) StreetView_Pointed.gameObject.renderer.material.color=Color.red; StreetView_Pointed = null; } } } else { // TODO : Mouse Exit (SHJO) if(StreetView_Pointed != null) { StreetView_Pointed.gameObject.renderer.material.color=Color.red; StreetView_Pointed = null; } } if (Input.GetMouseButtonDown (0)) { if(StreetView_Pointed != null) { Application.LoadLevel("StreetViewer"); } } }
// Update is called once per frame void Update() { Frame frame = controller.Frame(); //frame GestureList gestures = frame.Gestures(); //frame 안의 gesture 인식 HandList hands = frame.Hands; //frame 안의 hands 인식 int num_hands = hands.Count; //hand의 수 if (sceneZoomIn == true) //f { SceneChangeZoom(sceneZoomIn,sceneZoomOut); } if (num_hands < 1) // 인식된 손이 없다면 { return; } else { Hand left = hands.Leftmost; //왼쪽손 Hand right = hands.Rightmost; //오른쪽 손 FingerList fingerList = left.Fingers; //왼쪽 손의 손가락들! Finger leftFinger = fingerList.Frontmost; //왼손에서 제일 앞에 있는 손가락 rigid = GameObject.Find("RigidHand(Clone)"); if (rigid == null) { Debug.LogWarning("RigidHand is null"); return; } cursorPointer = GameObject.Find("RigidHand(Clone)/index/bone3"); if (cursorPointer == null) { Debug.LogWarning("CursorPointer is null"); return; } //여기에서 립모션 손모양 오븥젝트의 Collision 을 해체하여 Raycast에 충돌 하지 않게 한다. Collider[] cols = rigid.GetComponentsInChildren<Collider>(); for (int i = 0; i < cols.Length; i++) { cols[i].enabled = false; } //팁핑 포지션으로 커서를 이동 if (rigid != null) { //Debug.Log ("Rigid finded"); Vector3 temp = Tipping(); cursorModel.transform.position = temp; } //손바닥을 UnityScale로 좌표 변환 , Handcontroller TransformPoint로 Transform 형식에 맞게 변환, 이후 왼쪽 카메라 기준으로 월드 스크린으로 변환 Vector2 screenPoint = leftCamera.camera.WorldToScreenPoint(cursorPointer.transform.position); Ray r = leftCamera.camera.ScreenPointToRay(screenPoint); // ScreentPoint로부터 Ray를 쏜다 Debug.DrawRay(r.origin, r.direction * 1000, Color.red); RaycastHit hit; //rayCast에서 부딛힌 객체 관리 if (Physics.Raycast(r, out hit, Mathf.Infinity)) { if(hit.collider != null) { target.transform.position = hit.transform.position; if(hit.collider.gameObject.tag == "StreetviewPoint") { StreetView_Pointed = hit.collider.gameObject.GetComponent<StreetviewPoint>(); if(StreetView_Pointed != null) { // TODO : Mouse Enter (SHJO) StreetView_Pointed.Pointed() ; } } } } else { // TODO : Mouse Exit (SHJO) if(StreetView_Pointed != null) { StreetView_Pointed.PointedOut(); StreetView_Pointed = null; } } //립모션 제스쳐 감지 for (int i = 0; i < gestures.Count; i++) { Gesture gesture = gestures[i]; HandList handsForGesture = gesture.Hands; if (num_hands == 1) { // Key Tap if (gesture.Type == Gesture.GestureType.TYPE_KEY_TAP) { KeyTapGesture keyTap = new KeyTapGesture(gesture); Debug.Log("TYPE_KEY_TAP - Duration : " + keyTap.DurationSeconds.ToString()); cursorModel.renderer.material.color = Color.blue; GameObject particleObj = Instantiate(clickParticle, Tipping () , Quaternion.identity) as GameObject; Destroy (particleObj,2f); if(StreetView_Pointed != null) { // TODO : Click (SHJO) if(sceneZoomOut==true) SceneChangeZoom(sceneZoomIn,sceneZoomOut); Application.LoadLevel("StreetViewer"); } } // Screen Tap else if (gesture.Type == Gesture.GestureType.TYPE_SCREEN_TAP) { ScreenTapGesture screenTap = new ScreenTapGesture(gesture); print("Screen Tap " + screenTap.Duration.ToString()); cursorModel.renderer.material.color = Color.red; if(StreetView_Pointed != null) { // TODO : Click - Optional (SHJO) if(sceneZoomOut==true) //SceneChangeZoom(sceneZoomIn,sceneZoomOut); Application.LoadLevel("StreetViewer"); } } // Swipe else if (gesture.Type == Gesture.GestureType.TYPE_SWIPE) { SwipeGesture swipe = new SwipeGesture(gesture); print("Swipe Speed : " + swipe.Speed.ToString()); print("Swipe Start : " + swipe.StartPosition.ToString()); print("Swipe End : " + swipe.Position.ToString()); // TODO : Swipe (SHJO) if(swipe.StartPosition.x > swipe.Position.x) // swipe.direction을 써도됨 { earth.transform.Rotate(new Vector3(0, -Time.deltaTime * swipeSpeed, 0)); } else { earth.transform.Rotate(new Vector3(0, Time.deltaTime * swipeSpeed, 0)); } } // Circle else if (gesture.Type == Gesture.GestureType.TYPE_CIRCLE) { CircleGesture circleGesture = new CircleGesture(gesture); print("Circle"); // TODO : Circle (SHJO) if (circleGesture.Pointable.Direction.AngleTo(circleGesture.Normal) <= Math.PI / 2) // Clockwise { earth.transform.Rotate(new Vector3(0, -Time.deltaTime * swipeSpeed, 0)); } else // Counterclockwise { earth.transform.Rotate(new Vector3(0, Time.deltaTime * swipeSpeed, 0)); } } } // ZOOM IN OUT Motion if (num_hands == 2) { if (handsForGesture[0].IsLeft && gesture.Type == Gesture.GestureType.TYPESWIPE) { Debug.Log("left zoom"); SwipeGesture Swipe = new SwipeGesture(gesture); Vector swipeDirection = Swipe.Direction; if (swipeDirection.x < 0) { if (leftCamera.camera.fieldOfView < maxFov) { leftCamera.camera.fieldOfView += zoomScale; rightCamera.camera.fieldOfView += zoomScale; } } else if (swipeDirection.x > 0) { if (leftCamera.camera.fieldOfView > minFov) { leftCamera.camera.fieldOfView -= zoomScale; rightCamera.camera.fieldOfView -= zoomScale; } } } else if ((!handsForGesture[0].IsLeft) && gesture.Type == Gesture.GestureType.TYPESWIPE) { Debug.Log("right zoom"); SwipeGesture Swipe = new SwipeGesture(gesture); Vector swipeDirection = Swipe.Direction; if (swipeDirection.x > 0) { if (leftCamera.camera.fieldOfView < maxFov) { leftCamera.camera.fieldOfView += zoomScale; rightCamera.camera.fieldOfView += zoomScale; } } else if (swipeDirection.x < 0) { if (leftCamera.camera.fieldOfView > minFov) { leftCamera.camera.fieldOfView -= zoomScale; rightCamera.camera.fieldOfView -= zoomScale; } } } } // END OF ZOOM IN GESTURE } // END OF GESTURE RECOGNITION LOOP } // END OF IF }