Uniy_Mouse_Camera_Control
using UnityEngine;
using System.Collections;
public class CS_Camera_Control : MonoBehaviour
{
//#define
public float MINIMUM_DISTANCE = 2.0f;
public float MAXUM_DISTANCE = 10.0f;
public int MINIMUM_ANGLE_Y = -80;
public int MAXIMUM_ANGLE_Y = 80;
//Transform
public Transform Camera_Axis = null;
public Transform cam = null;
//X
float xAngl = 0.0f;
public float xSpeed = 5.0f;
//Y
float yAngl = 0.0f;
public float ySpeed = 5.0f;
//Z
float curDist = 0.0f;
float originDist = 0.0f;
void Start ()
{
curDist = MAXUM_DISTANCE;
originDist = MAXUM_DISTANCE;
cam = GameObject.Find ("Main Camera").transform;
Camera_Axis = transform;
//마우스 커서 안보이게
Screen.showCursor = false;
}
void LateUpdate ()
{
MouseControl();
}
//Method
void MouseControl ()
{
//X
{
float X = Input.GetAxis ("Mouse X") * xSpeed * Time.deltaTime;
cam.transform.RotateAround (Camera_Axis.up, X);
xAngl = cam.eulerAngles.y;
}
//Y
{
yAngl -= Input.GetAxis ( "Mouse Y" ) * ySpeed;
yAngl = ClampAngle (yAngl, MINIMUM_ANGLE_Y, MAXIMUM_ANGLE_Y);
}
//Z
{
{
originDist -= Input.GetAxis ("Mouse ScrollWheel") * 5.0f;
originDist = Mathf.Clamp (originDist, MINIMUM_DISTANCE, MAXUM_DISTANCE);
}
Quaternion camRot = Quaternion.Euler (yAngl, xAngl, 0);
Vector3 camPos = Camera_Axis.position - (camRot * new Vector3(0,0,originDist) );
RaycastHit hit;
if (Physics.Linecast (Camera_Axis.transform.position, camPos, out hit))
curDist = hit.distance;
else
curDist = Mathf.Lerp (curDist, originDist, Time.deltaTime*5);
camPos = Camera_Axis.position - (camRot * new Vector3(0,0,curDist) );
cam.rotation = camRot;
cam.position = camPos;
}
//Ray Debug
{
Vector3 forward = -cam.transform.forward*MAXUM_DISTANCE; //transform.TransformDirection(-Vector3.forward) * 10;
Debug.DrawRay(Camera_Axis.position, forward, Color.green);
}
}
float ClampAngle ( float angle, float min, float max )
{
if (angle < -360) angle += 360;
if (angle > 360) angle -= 360;
return Mathf.Clamp (angle, min, max);
}
}
출처 : http://gamets99.blogspot.kr/search/label/Unity3D