Skip to content
Snippets Groups Projects
Commit c23b6fc7 authored by Alexis Iakovenko's avatar Alexis Iakovenko
Browse files

Add rotating camera feature

parent 1cbea0ad
No related branches found
No related tags found
No related merge requests found
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class CameraRotator : MonoBehaviour
{
public GameObject CameraTarget;
public float cameraTargetHeight = 0.0f;
public int ZoomRate = 20;
public float MaxViewDistance = 15f;
public float MinViewDistance = 1f;
private float x = 0.0f;
private float y = 0.0f;
private int mouseXSpeedMod = 5;
private int mouseYSpeedMod = 5;
private float distance = 3f;
private float desireDistance;
private float correctedDistance;
private float currentDistance;
private Vector3 initialPosition;
private Quaternion initialRotation;
private bool useInitialTransform = true;
public void ToggleUseInitialTransform()
{
if (useInitialTransform)
useInitialTransform = false;
else
{
transform.position = initialPosition;
transform.rotation = initialRotation;
useInitialTransform = true;
}
}
void Start ()
{
initialPosition = transform.position;
initialRotation = transform.rotation;
Vector3 Angles = transform.eulerAngles;
x = Angles.x;
y = Angles.y;
currentDistance = distance;
desireDistance = distance;
correctedDistance = distance;
}
void LateUpdate ()
{
if (!useInitialTransform)
{
if (Input.GetMouseButton (0)) //left click
{
x += Input.GetAxis("Mouse X") * mouseXSpeedMod;
y -= Input.GetAxis("Mouse Y") * mouseYSpeedMod;
}
//apply
y = ClampAngle (y, -15, 25);
Quaternion rotation = Quaternion.Euler (y,x,0);
desireDistance -= Input.GetAxis("Mouse ScrollWheel") * Time.deltaTime * ZoomRate * Mathf.Abs(desireDistance);
desireDistance = Mathf.Clamp (desireDistance, MinViewDistance, MaxViewDistance);
correctedDistance = desireDistance;
Vector3 position = CameraTarget.transform.position - (rotation * Vector3.forward * desireDistance);
RaycastHit collisionHit;
Vector3 cameraTargetPosition = new Vector3 (CameraTarget.transform.position.x, CameraTarget.transform.position.y + cameraTargetHeight, CameraTarget.transform.position.z);
bool isCorrected = false;
if (Physics.Linecast (cameraTargetPosition, position, out collisionHit))
{
position = collisionHit.point;
correctedDistance = Vector3.Distance(cameraTargetPosition,position);
isCorrected = true;
}
currentDistance = !isCorrected || correctedDistance > currentDistance ? Mathf.Lerp(currentDistance,correctedDistance,Time.deltaTime * ZoomRate) : correctedDistance;
position = CameraTarget.transform.position - (rotation * Vector3.forward * currentDistance + new Vector3 (0, -cameraTargetHeight, 0));
transform.rotation = rotation;
transform.position = position;
}
}
private 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);
}
}
fileFormatVersion: 2
guid: f9717c297d551d14d91808e2b82d60fe
timeCreated: 1515426840
licenseType: Free
MonoImporter:
externalObjects: {}
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:
assetBundleName:
assetBundleVariant:
This diff is collapsed.
fileFormatVersion: 2
guid: 0121c37022d319d4a9c16a0c6b08ac20
folderAsset: yes
timeCreated: 1515427857
licenseType: Free
DefaultImporter:
externalObjects: {}
userData:
assetBundleName:
assetBundleVariant:
Assets/Textures/video-camera.png

15.4 KiB

fileFormatVersion: 2
guid: 33dfc4537cc1e124d84a4704e2304e54
timeCreated: 1515427862
licenseType: Free
TextureImporter:
fileIDToRecycleName: {}
externalObjects: {}
serializedVersion: 4
mipmaps:
mipMapMode: 0
enableMipMap: 0
sRGBTexture: 1
linearTexture: 0
fadeOut: 0
borderMipMap: 0
mipMapsPreserveCoverage: 0
alphaTestReferenceValue: 0.5
mipMapFadeDistanceStart: 1
mipMapFadeDistanceEnd: 3
bumpmap:
convertToNormalMap: 0
externalNormalMap: 0
heightScale: 0.25
normalMapFilter: 0
isReadable: 0
grayScaleToAlpha: 0
generateCubemap: 6
cubemapConvolution: 0
seamlessCubemap: 0
textureFormat: 1
maxTextureSize: 2048
textureSettings:
serializedVersion: 2
filterMode: -1
aniso: -1
mipBias: -1
wrapU: 1
wrapV: 1
wrapW: -1
nPOTScale: 0
lightmap: 0
compressionQuality: 50
spriteMode: 1
spriteExtrude: 1
spriteMeshType: 1
alignment: 0
spritePivot: {x: 0.5, y: 0.5}
spriteBorder: {x: 0, y: 0, z: 0, w: 0}
spritePixelsToUnits: 100
alphaUsage: 1
alphaIsTransparency: 1
spriteTessellationDetail: -1
textureType: 8
textureShape: 1
maxTextureSizeSet: 0
compressionQualitySet: 0
textureFormatSet: 0
platformSettings:
- buildTarget: DefaultTexturePlatform
maxTextureSize: 2048
resizeAlgorithm: 0
textureFormat: -1
textureCompression: 1
compressionQuality: 50
crunchedCompression: 0
allowsAlphaSplitting: 0
overridden: 0
- buildTarget: Standalone
maxTextureSize: 2048
resizeAlgorithm: 0
textureFormat: -1
textureCompression: 1
compressionQuality: 50
crunchedCompression: 0
allowsAlphaSplitting: 0
overridden: 0
- buildTarget: Android
maxTextureSize: 2048
resizeAlgorithm: 0
textureFormat: -1
textureCompression: 1
compressionQuality: 50
crunchedCompression: 0
allowsAlphaSplitting: 0
overridden: 0
- buildTarget: WebGL
maxTextureSize: 2048
resizeAlgorithm: 0
textureFormat: -1
textureCompression: 1
compressionQuality: 50
crunchedCompression: 0
allowsAlphaSplitting: 0
overridden: 0
spriteSheet:
serializedVersion: 2
sprites: []
outline: []
physicsShape: []
spritePackingTag:
userData:
assetBundleName:
assetBundleVariant:
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment