usingUnityEngine;
usingSystem.Collections;
publicclassScript_07_11:MonoBehaviour
{
publicTransformtarget;
privateintMouseWheelSensitivity=1;
privateintMouseZoomMin=1;
privateintMouseZoomMax=5;
privatefloatnormalDistance=3;
privateVector3normalized;
privatefloatxSpeed=250.0f;
privatefloatySpeed=120.0f;
privateintyMinLimit=-20;
privateintyMaxLimit=80;
privatefloatx=0.0f;
privatefloaty=0.0f;
privateVector3screenPoint;
privateVector3offset;
privateQuaternionrotation=Quaternion.Euler(newVector3(30f,0f,0f));
privateVector3CameraTarget;
voidStart()
{
CameraTarget=target.position;
floatz=target.transform.position.z-normalDistance;
transform.position=rotation*newVector3(transform.position.x,transform.position.y,z);
transform.LookAt(target);
varangles=transform.eulerAngles;
x=angles.y;
y=angles.x;
}
voidUpdate()
{
if(Input.GetMouseButton(1))
{
x+=Input.GetAxis("Mouse X")*xSpeed*0.02f;
y-=Input.GetAxis("Mouse Y")*ySpeed*0.02f;
y=ClampAngle(y,yMinLimit,yMaxLimit);
varrotation=Quaternion.Euler(y,x,0);
varposition=rotation*newVector3(0.0f,0.0f,-normalDistance)+CameraTarget;
transform.rotation=rotation;
transform.position=position;
}elseif(Input.GetAxis("Mouse ScrollWheel")!=0)
{
normalized=(transform.position-CameraTarget).normalized;
if(normalDistance>=MouseZoomMin&&normalDistance<=MouseZoomMax)
{
normalDistance-=Input.GetAxis("Mouse ScrollWheel")*MouseWheelSensitivity;
}
if(normalDistance<MouseZoomMin)
{
normalDistance=MouseZoomMin;
}
if(normalDistance>MouseZoomMax)
{
normalDistance=MouseZoomMax;
}
transform.position= normalized*normalDistance;
}elseif(Input.GetMouseButtonDown(2))
{
screenPoint=Camera.main.WorldToScreenPoint(target.transform.position);
offset=target.transform.position-Camera.main.ScreenToWorldPoint(newVector3(Input.mousePosition.x,Input.mousePosition.y,screenPoint.z));
}
if(Input.GetMouseButton(2))
{
Vector3curScreenPoint=newVector3(Input.mousePosition.x,Input.mousePosition.y,screenPoint.z);
Vector3curPosition=Camera.main.ScreenToWorldPoint(curScreenPoint)+offset;
target.transform.position=curPosition;
}
transform.LookAt(CameraTarget);
}
staticfloatClampAngle(floatangle,floatmin,float max)
{
if(angle<-360)
angle+=360;
if(angle>360)
angle-=360;
returnMathf.Clamp(angle,min,max);
}
}