- Home /
Can't rotate by touch an object in augmented reality
I need to rotate by touch an object attached to the image target when it appears on screen in a AR project. I have used this script http://www.revelopment.co.uk/tutorials/unitytutorials/73-howtorotateanobjectbytouch in others projects but I don´t know why doesn't work with this one.
I'm using the Vuforia extension for Unity version 1.5.10 in unity 3.5
> // Revelopment.co.uk // Created by
> Carlos Revelo // 2011
>
>
>
>
> /********Main Objects***********/
>
> var targetItem : GameObject; var
> GUICamera : Camera; var ambient :
> GameObject;
>
>
> /********Rotation Variables*********/
> var rotationRate : float = 1.0;
> private var wasRotating;
>
> /************Scrolling inertia
> variables************/ private var
> scrollPosition : Vector2 =
> Vector2.zero; private var
> scrollVelocity : float = 0; private
> var timeTouchPhaseEnded: float;
> private var inertiaDuration : float =
> 0.5f;
>
> private var itemInertiaDuration :
> float = 1.0f; private var
> itemTimeTouchPhaseEnded: float;
> private var rotateVelocityX : float =
> 0; private var rotateVelocityY : float
> = 0;
>
>
> var hit: RaycastHit;
>
> private var layerMask = (1 << 8) | (1
> << 2);
>
>
>
> function Start() { layerMask =~
> layerMask; }
>
> function FixedUpdate() { if
> (Input.touchCount > 0) { // If
> there are touches... var theTouch :
> Touch = Input.GetTouch (0); // Cache
> Touch (0)
> var ray = Camera.main.ScreenPointToRay(theTouch.position);
> //var GUIRay =
> GUICamera.ScreenPointToRay(theTouch.position);
>
>
> if(Physics.Raycast(ray,hit,50,layerMask))
> {
>
> if(Input.touchCount == 1)
> {
>
> if (theTouch.phase == TouchPhase.Began)
> {
> wasRotating = false;
> }
>
> if (theTouch.phase == TouchPhase.Moved)
> {
>
> targetItem.transform.Rotate(theTouch.deltaPosition.y
> * rotationRate, -theTouch.deltaPosition.x * rotationRate,0,Space.World);
> wasRotating = true;
> }
>
> if (theTouch.phase == TouchPhase.Ended || theTouch.phase ==
> TouchPhase.Canceled)
> {
> if(wasRotating==true)
> {
> if(Mathf.Abs(theTouch.deltaPosition.x)
> >=10)
> {
> rotateVelocityX = theTouch.deltaPosition.x /
> theTouch.deltaTime;
> }
> if(Mathf.Abs(theTouch.deltaPosition.y)
> >=10)
> {
> rotateVelocityY = theTouch.deltaPosition.y /
> theTouch.deltaTime;
> }
> itemTimeTouchPhaseEnded = Time.time;
> }
> }
> } }
>
>
>
>
> } /******************** Inertia code ******************************/
> if(Input.touchCount == 0 )
> {
> if(scrollVelocity != 0.0)
> {
> //slowing down
> var t : float = (Time.time - timeTouchPhaseEnded) / inertiaDuration;
> var frameVelocity : float = Mathf.Lerp(scrollVelocity, 0 , t);
>
> scrollPosition.x -= frameVelocity * Time.deltaTime;
>
> if(t >= inertiaDuration)
> scrollVelocity = 0.0f;
>
>
> }
>
> if(rotateVelocityX != 0.0f || rotateVelocityY != 0.0f)
> {
> //slowing down
> var ty : float = (Time.time - itemTimeTouchPhaseEnded) / itemInertiaDuration;
> var XVelocity : float = Mathf.Lerp(rotateVelocityX, 0 , ty);
> var YVelocity : float = Mathf.Lerp(rotateVelocityY, 0 , ty);
>
>
> if(ty >= inertiaDuration)
> {
> rotateVelocityX = 0.0f;
> rotateVelocityY = 0.0f;
>
> }
> targetItem.transform.Rotate(YVelocity*Time.deltaTime
> * rotationRate, -XVelocity * Time.deltaTime *
> rotationRate,0,Space.World);
>
> }
>
>
> } }
Comment
Your answer
Follow this Question
Related Questions
Rotating Camera on Touch 1 Answer
Rotate object around single axis using mouse/touch 0 Answers
Reacting to game being minimised/rotated? 0 Answers
Rotate Camera around Object 2 Answers
Rotate object with touch 4 Answers