Check out the finished code below the videos
- 0:45 - Scene explaination and script planning
- 1:45 - Starting the script, setting up variables and our function
- 3:07 - Explaination of Euler Angles in Unity
- 4:18 - Calculating our camera's pitch and yaw rotations
- 5:58 - Working Demonstration in game
- 6:30 - Invert look option
- 7:55 - Limiting the up and down look rotation with Mathf.Clamp
- 9:05 - Demonstration of clamped rotation
- 9:25 - Using our script to rotate any game object
- 10:05 - Setting up a Touchpad area on screen to limit the area you can use to rotate the camera
- 13:13 - Outro - Describing Part 2 of our FPS controller where we'll make a joystick to control the player movement
Check out the videos above to hear the explanation and see the code in action
/*/
* Script by Devin Curry
* www.Devination.com
* www.youtube.com/user/curryboy001
* Please like and subscribe if you found my tutorials helpful :D
* Twitter: https://twitter.com/Devination3D
/*/
using UnityEngine;
using System.Collections;
public class PinchZoom : TouchLogicV2//NOTE: This script has been updated to V2 after video recording
{
public float zoomSpeed = 5.0f;
//buckets for caching our touch positions
private Vector2 currTouch1 = Vector2.zero,
lastTouch1 = Vector2.zero,
currTouch2 = Vector2.zero,
lastTouch2 = Vector2.zero;
//used for holding our distances and calculating our zoomFactor
private float currDist = 0.0f,
lastDist = 0.0f,
zoomFactor = 0.0f;
public override void OnTouchMovedAnywhere()
{
Zoom();
}
public override void OnTouchStayedAnywhere()
{
Zoom();
}
//find distance between the 2 touches 1 frame before & current frame
//if the delta distance increased, zoom in, if delta distance decreased, zoom out
void Zoom()
{
//Caches touch positions for each finger
switch(TouchLogicV2.currTouch)
{
case 0://first touch
currTouch1 = Input.GetTouch(0).position;
lastTouch1 = currTouch1 - Input.GetTouch(0).deltaPosition;
break;
case 1://second touch
currTouch2 = Input.GetTouch(1).position;
lastTouch2 = currTouch2 - Input.GetTouch(1).deltaPosition;
break;
}
//finds the distance between your moved touches
//we dont want to find the distance between 1 finger and nothing
if(TouchLogicV2.currTouch >= 1)
{
currDist = Vector2.Distance(currTouch1, currTouch2);
lastDist = Vector2.Distance(lastTouch1, lastTouch2);
}
else
{
currDist = 0.0f;
lastDist = 0.0f;
}
//Calculate the zoom magnitude
zoomFactor = Mathf.Clamp(lastDist - currDist, -30.0f, 30.0f);
//apply zoom to our camera
Camera.main.transform.Translate(Vector3.forward * zoomFactor * zoomSpeed * Time.deltaTime);
}
}