由于场景中的模型需要设置为static,所以模型不能移动和旋转,所以只能通过控制摄像机来实现。
/// <summary>
/// 镜头的远离和接近
/// </summary>
public void Ctrl_Cam_Zoom()
{
if (target)
{
float dis = Vector3.Distance(transform.position, target.position);
if (dis > ZoomMax || dis < ZoomMin)
return;
float vertical = 0.0f;
vertical += Input.GetAxis("Mouse ScrollWheel") * ZoomSpeed;
transform.position += Camera.main.transform.forward * vertical;
}
}
/// <summary>
/// 镜头的移动
/// </summary>
public void Ctrl_Cam_Move()
{
if (Input.GetMouseButton(0))
{
transform.Translate(Vector3.left * Input.GetAxis("Mouse X") * MoveSpeed);
transform.Translate(Vector3.up * Input.GetAxis("Mouse Y") * -MoveSpeed);
}
}
/// <summary>
/// 摄像机的旋转
/// </summary>
public void Cam_Ctrl_Rotation()
{
if (target)
{
var mouse_x = Input.GetAxis("Mouse X");//获取鼠标X轴移动
var mouse_y = -Input.GetAxis("Mouse Y");//获取鼠标Y轴移动
if (Input.GetKey(KeyCode.Mouse1))
{
transform.RotateAround(target.position, Vector3.up, mouse_x * RotateSpeed);
//float y = transform.eulerAngles.y + mouse_y * RotateSpeed;
//Debug.Log(mouse_y * RotateSpeed);
//if (y < 60)
//{
// transform.RotateAround(target.position, transform.right, (mouse_y * RotateSpeed) + (60 - y));
//}
//else if (y > 320) //旋转角度大于85则设置85
//{
// transform.RotateAround(target.position, transform.right, (mouse_y * RotateSpeed) - (y - 320));
//}
//else
//{
// transform.RotateAround(target.position, transform.right, mouse_y * RotateSpeed);
//}
transform.RotateAround(target.position, transform.right, mouse_y * RotateSpeed);
}
}
}
代码中target是围绕物体的Transform,
个人感觉此代码还不完善,就是旋转的部分,没有进行角度的控制,可以随意的旋转,按照我的项目来说,我本想在上下旋转上进行限制,不让用户看到模型的底部,但是没有研究成功,领导也满意现在的成果,所以现在不在进行研究,以后代码有了改善再来修改