您的位置:首页 > 移动开发 > Unity3D

unity 控制摄像机旋转和缩放

2015-01-30 16:49 375 查看
在做项目的时候,有用到相机绕着某个物体旋转和近距离查看的功能。所以过来贴贴代码。

/// <summary>
/// Mouse orbit.
/// This script use to control a main camera
/// </summary>

using UnityEngine;
using System.Collections;

public class MouseOrbit : MonoBehaviour
{
public GameObject target; //a target look at
public float xSpeed; //speed pan x
public float ySpeed; //speed pan y
public float yMinLimit; //y min limit
public float yMaxLimit; //y max limit

public float scrollSpeed; //scroll speed
public float zoomMin;  //zoom min
public float zoomMax; //zoom max

private float distance;
private float distanceLerp;
private Vector3 position;
private bool isActivated;
private float x;
private float y;

// Use this for initialization

void Start()
{
//Warning when not found target
if (target == null)
{
target = GameObject.FindGameObjectWithTag("Player");

if (target == null)
{
Debug.LogWarning("Don't found player tag please change player tag to Player");
}
}

//Setup Pos
Vector3 angles = transform.eulerAngles;
x = angles.y;
y = angles.x;

CalDistance();
}

void LateUpdate()
{
ScrollMouse();
RotateCamera();
}

//Roate camera method
void RotateCamera()
{
if (Input.GetMouseButtonDown(1))
{
isActivated = true;
}

if (Input.GetMouseButtonUp(1))
{
isActivated = false;
}

if (isActivated)
{
y -= Input.GetAxis("Mouse Y") * ySpeed;

x += Input.GetAxis("Mouse X") * xSpeed;

y = ClampAngle(y, yMinLimit, yMaxLimit);

Quaternion rotation = Quaternion.Euler(y, x, 0);

Vector3 calPos = new Vector3(0, 0, -distanceLerp);

position = rotation * calPos + target.transform.position;

transform.rotation = rotation;

transform.position = position;
}
}

//Calculate Distance Method
void CalDistance()
{
distance = zoomMax;
distanceLerp = distance;
Quaternion rotation = Quaternion.Euler(y, x, 0);
Vector3 calPos = new Vector3(0, 0, -distanceLerp);
position = rotation * calPos + target.transform.position;
transform.rotation = rotation;
transform.position = position;
}

//Scroll Mouse Method
void ScrollMouse()
{
distanceLerp = Mathf.Lerp(distanceLerp, distance, Time.deltaTime * 5);
if (Input.GetAxis("Mouse ScrollWheel") != 0)
{
// get the distance between camera and target

distance = Vector3.Distance(transform.position, target.transform.position);

distance = ScrollLimit(distance - Input.GetAxis("Mouse ScrollWheel") * scrollSpeed, zoomMin, zoomMax);

}
}

//Scroll Limit Method
float ScrollLimit(float dist, float min, float max)
{
if (dist < min)

dist = min;

if (dist > max)

dist = max;

return dist;
}

//Clamp Angle Method
float ClampAngle(float angle, float min, float max)
{
if (angle < -360)
angle += 360;
if (angle > 360)
angle -= 360;
return Mathf.Clamp(angle, min, max);
}
}


这就是全部的代码,target是我们要围绕的目标对象。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: