- Home /
 
KeyboardOrbit with DualTouchControls
Hi, I have problem with moving camera with KeyboardOrbit script using DualTouchControls prefab. Touchpad works great with FirstPersonCharacter (disabled when orbit camera is active), but I can't move orbit camera with touchpad even if touchpad is set to the same axis... :(
Touch Pad Settins 
Keyboard Orbit Settings (orbit camera) 
When KeyboardOrbit is set to Horizontal and Vertical or Mouse X and Y, it works well on pc keyboard/mouse, but on phone don't. I also created ZoomAxis but it also don't work with this script (in this case only Fire1 Fire2 axis works).
In orginal KeyboardOrbit script I added/changed:
 public string horizontalAxisName = "Horizontal";
 public string verticalAxisName = "Vertical";
 public string zoomAxisName = "ZoomAxis";
 
 x -= Input.GetAxis(horizontalAxisName) * xSpeed * 0.02f;
 y += Input.GetAxis(verticalAxisName) * ySpeed * 0.02f;
 
 distance -= Input.GetAxis(zoomAxisName) *zoomSpeed* 0.02f;
 distance += Input.GetAxis(zoomAxisName) *zoomSpeed* 0.02f;
 
               ZoomAxis settings:
 Name ZoomAxis
 Negative Button -
 PositiveButton +
 Gravity 1000
 Dead 0.001
 Sensitivity 1000
 Snap off
 Invert off
 Type Key or MouseButton
 Axis X axis
 Joy Num Get Motion from all Joystics
 
              Answer by shruikan · Sep 10, 2015 at 06:25 PM
I found the solution. I had to add/change some lines to the KeyboardOrbit script that read touch imput.
 using UnityEngine;
 using System.Collections;
 
 public class CameraMoveTouchscreen : MonoBehaviour {
     
     public Transform target;
     public float distance= 1.5f;
     public float xSpeed= 175.0f;
     public float ySpeed= 75.0f;
     public float pinchSpeed = 0.5f;
     
     private float lastDist = 0;
     private float curDist = 0;
     
     public int yMinLimit= 10; 
     public int yMaxLimit= 80;
         
     public float minDistance= 0.5f;     
     public float maxDistance= 1.5f;
         
     private float x= 0.0f;
     private float y= 0.0f;
     
     private Touch touch;
     
     
     void  Start () {
         Vector3 angles= transform.eulerAngles;
         x = angles.y;
         y = angles.x;
 
         // Make the rigid body not change rotation
         if (GetComponent<Rigidbody>())
             GetComponent<Rigidbody>().freezeRotation = true;    
     }
     
 
     void  LateUpdate (){
         if (target && GetComponent<Camera>()) {
 
             if (Input.touchCount == 1 && Input.GetTouch(0).phase == TouchPhase.Moved) {
                 
                 touch = Input.GetTouch(0);
                 x += touch.deltaPosition.x * xSpeed * 0.02f;
                 y -= touch.deltaPosition.y * ySpeed * 0.02f;
                 y = ClampAngle(y, yMinLimit, yMaxLimit);
             }
 
             if (Input.touchCount == 2 && (Input.GetTouch(0).phase == TouchPhase.Moved || Input.GetTouch(1).phase == TouchPhase.Moved)) {
 
                 Touch touchZero = Input.GetTouch(0);
                 Touch touchOne = Input.GetTouch(1);
 
                 Vector2 touchZeroPrevPos = touchZero.position - touchZero.deltaPosition;
                 Vector2 touchOnePrevPos = touchOne.position - touchOne.deltaPosition;
 
                 float prevTouchDeltaMag = (touchZeroPrevPos - touchOnePrevPos).magnitude;
                 float touchDeltaMag = (touchZero.position - touchOne.position).magnitude;
 
                 float deltaMagnitudeDiff = prevTouchDeltaMag - touchDeltaMag;
 
                 distance += deltaMagnitudeDiff * pinchSpeed * 0.02f;
                 distance = ClampAngle(distance, minDistance, maxDistance);
 
         }
             Quaternion rotation= Quaternion.Euler(y, x, 0.0f);    
             Vector3 vTemp = new Vector3(0.0f, 0.0f, -distance);
             Vector3 position = rotation * vTemp + target.position;
             
             transform.rotation = rotation;
             transform.position = position;    
         }
     }
     
 
     static float ClampAngle (float angle, float min, float max) {
         if (angle < -360)
             angle += 360;
         if (angle > 360)
             angle -= 360;
         return Mathf.Clamp (angle, min, max);    
     }
 }
 
 
              @shruikan What is this touchpad for? Can it be used for the touchpad on DualShock4 remotes?
Your answer