using UnityEngine;
using System.Collections;
[AddComponentMenu("Camera-Control/Mouse OrbitC")]
public class MouseOrbitC : MonoBehaviour {
// Use this for initialization
public Transform target;
public float distance = 10.0f;//相机距对象距离
public float height = 10.0f; //相机距对象高度
public float Maxdistance = 40.0f; //相机距对象最大距离
public float Mindistance = 10.0f;
public float xSpeed = 250.0f;
public float ySpeed = 120.0f;
public float mousedown_Movespeen = 10.0f;
public int yMinLimit = -20;
public int yMaxLimit = 80;
public float WheelSpeed = 5.0f; //鼠标滚轮控制相机镜头移动速度
private float x = 0.0f;
private float y = 0.0f;
private float scale = 0.0f; //距离和高度比,当鼠标滚轮操作,距离变化,要据这个值求出相应的高度变化
private bool mousedown = false; //判断鼠标右键是否按下
private float startmouse = 0.0f; //鼠标右键按下时,鼠标的点位置
//private intital intitalScript;
//private tankrotation tankrotationScript;
//private float wheeeldistance = 0.0f;
void Start () {
Vector3 angles = transform.eulerAngles;
x = angles.y;
y = angles.x;
scale = distance / height ;
// intitalScript = gameObject.GetComponent<intital>();
// tankrotationScript = target.gameObject.GetComponent<tankrotation>();
// Make the rigid body not change rotation
if (rigidbody){
rigidbody.freezeRotation = true;
}
}
// Update is called once per frame
void Update () {
}
void LateUpdate(){
if(Input.GetButtonDown("RightMouse")){ //检测是否按下鼠标右键 RightMouse是在InputManager里面设定的,右键值为mouse 1
mousedown = true;
Debug.Log("mouseRight");
// intitalScript.enabled = false;
// tankrotationScript.enabled = false;
// if(startmouse ==0.0f){
// startmouse = Input.mousePosition.x;
// }
// float mouse_md = Input.mousePosition.x - startmouse;
// Debug.Log(mouse_md+"");
// //if(mouse_md >=0){
// transform.Rotate(transform.up * mouse_md *Time.deltaTime);
// startmouse = Input.mousePosition.x;
//}
}
if(mousedown){ //当鼠标右键被按下
if(startmouse ==0.0f){ //第一次被按下,对鼠标的初始位置进行初始化
startmouse = Input.mousePosition.x;
}
float mouse_md = Input.mousePosition.x - startmouse; //取得鼠标右键按下时移动的位移值
Debug.Log(mouse_md+"");
//if(mouse_md >=0){
transform.RotateAround(target.position,Vector3.up,mouse_md * mousedown_Movespeen * Time.deltaTime);//根据位移值正负和大小对摄相机对行旋转
//transform.Rotate(transform.up * mouse_md * mousedown_Movespeen * Time.deltaTime);
startmouse = Input.mousePosition.x;//将鼠标初始位置设为此帧鼠标位置
}
if(Input.GetButtonUp("RightMouse")){//判断当鼠标右键松开
mousedown = false;
// intitalScript.enabled = true;
// tankrotationScript.enabled = true;
Debug.Log("hello");
}
if (target&&!mousedown) { //当target存在且鼠标没有按住右键
x += Input.GetAxis("Mouse X") * xSpeed * 0.02f;
y -= Input.GetAxis("Mouse Y") * ySpeed * 0.02f;
distance -= Input.GetAxis("Mouse ScrollWheel") * WheelSpeed; //当滚轮操作,对距离值进行改变
distance = Mathf.Clamp(distance,Mindistance,Maxdistance);
height = distance / scale;
y = ClampAngle(y, yMinLimit, yMaxLimit);
Quaternion rotation = Quaternion.Euler(y, x, 0);
Vector3 position = rotation * new Vector3(0.0f, height, -distance) + target.position;
transform.rotation = rotation;
transform.position = position;
}
}
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);
}
}