Last active
August 29, 2015 14:16
-
-
Save litvil/0620a7b808f57a13d9c8 to your computer and use it in GitHub Desktop.
Unity3d. Camera touch movement
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
// http://stackoverflow.com/questions/11497085/move-camera-over-terrain-using-touch-input-in-unity-3d/27836741#27836741 | |
using UnityEngine; | |
using System.Collections; | |
public class ViewDrag : MonoBehaviour { | |
Vector3 hit_position = Vector3.zero; | |
Vector3 current_position = Vector3.zero; | |
Vector3 camera_position = Vector3.zero; | |
float z = 0.0f; | |
// Use this for initialization | |
void Start () { | |
} | |
void Update(){ | |
if(Input.GetMouseButtonDown(0)){ | |
hit_position = Input.mousePosition; | |
camera_position = transform.position; | |
} | |
if(Input.GetMouseButton(0)){ | |
current_position = Input.mousePosition; | |
LeftMouseDrag(); | |
} | |
} | |
void LeftMouseDrag(){ | |
// From the Unity3D docs: "The z position is in world units from the camera." In my case I'm using the y-axis as height | |
// with my camera facing back down the y-axis. You can ignore this when the camera is orthograhic. | |
current_position.z = hit_position.z = camera_position.y; | |
// Get direction of movement. (Note: Don't normalize, the magnitude of change is going to be Vector3.Distance(current_position-hit_position) | |
// anyways. | |
Vector3 direction = Camera.main.ScreenToWorldPoint(current_position) - Camera.main.ScreenToWorldPoint(hit_position); | |
// Invert direction to that terrain appears to move with the mouse. | |
direction = direction * -1; | |
Vector3 position = camera_position + direction; | |
transform.position = position; | |
} | |
} |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
private Vector2 worldStartPoint; | |
void Update () { | |
// only work with one touch | |
if (Input.touchCount == 1) { | |
Touch currentTouch = Input.GetTouch(0); | |
if (currentTouch.phase == TouchPhase.Began) { | |
this.worldStartPoint = this.getWorldPoint(currentTouch.position); | |
} | |
if (currentTouch.phase == TouchPhase.Moved) { | |
Vector2 worldDelta = this.getWorldPoint(currentTouch.position) - this.worldStartPoint; | |
Camera.main.transform.Translate( | |
-worldDelta.x, | |
-worldDelta.y, | |
0 | |
); | |
} | |
} | |
} | |
// convert screen point to world point | |
private Vector2 getWorldPoint (Vector2 screenPoint) { | |
RaycastHit hit; | |
Physics.Raycast(Camera.main.ScreenPointToRay(screenPoint), out hit); | |
return hit.point; | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment