摄像机围绕物体旋转观察
2017-12-11 10:41
661 查看
虽然代码可能不多,但是希望能给大家带来一些帮助
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class CameraItem : MonoBehaviour {
//摄像机所要观察的物体
public Transform target;
//摄像机距离物体的距离 这里我们初始默认的是5
public float distance = 5f;
//摄像机相对于物体的旋转速度
private float speedX = 240;
private float speedY = 120;
//限定摄像机只能旋转的角度
private float minLimitY = -40f;
private float maxLimitY = 240f;
//这两个值用于保存摄像机自身的一个角度
private float mX = 0.0f;
private float mY = 0.0f;
//这两个值用于限定摄像机距离物体的最大值和最小值
public float maxDistance = 2;
public float minDistance = 0.5f;
//鼠标滚轮拉近镜头的速度
private float zoomSpeed = 2f;
public bool isNeedDamping = true;
public float damping = 2.5f;
void Start()
{
mX = transform.eulerAngles.x;
mY = transform.eulerAngles.y;
}
void LateUpdate()
{
if (target != null && Input.GetMouseButton(0))
{
mX += Input.GetAxis("Mouse X") * speedX * Time.deltaTime;
mY -= Input.GetAxis("Mouse Y") * speedY * Time.deltaTime;
mY = ClampAngle(mY, minLimitY, maxLimitY);
}
distance -= Input.GetAxis("Mouse ScrollWheel") * zoomSpeed;
distance = Mathf.Clamp(distance, minDistance, maxDistance);
Quaternion mRotation = Quaternion.Euler(mY, mX, 0);
Vector3 mPosition = mRotation * new Vector3(0, 0, -distance) + target.position;
if (isNeedDamping)
{
transform.rotation = Quaternion.Lerp(transform.rotation, mRotation, Time.deltaTime * damping);
transform.position = Vector3.Lerp(transform.position, mPosition, Time.deltaTime * damping);
}
else
{
transform.rotation = mRotation;
transform.position = mPosition;
}
}
//限定角度
private float ClampAngle(float angle, float min, float max)
{
if (angle < -360) angle += 360;
if (angle > 360) angle -= 360;
return Mathf.Clamp(angle, min, max);
}
}
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class CameraItem : MonoBehaviour {
//摄像机所要观察的物体
public Transform target;
//摄像机距离物体的距离 这里我们初始默认的是5
public float distance = 5f;
//摄像机相对于物体的旋转速度
private float speedX = 240;
private float speedY = 120;
//限定摄像机只能旋转的角度
private float minLimitY = -40f;
private float maxLimitY = 240f;
//这两个值用于保存摄像机自身的一个角度
private float mX = 0.0f;
private float mY = 0.0f;
//这两个值用于限定摄像机距离物体的最大值和最小值
public float maxDistance = 2;
public float minDistance = 0.5f;
//鼠标滚轮拉近镜头的速度
private float zoomSpeed = 2f;
public bool isNeedDamping = true;
public float damping = 2.5f;
void Start()
{
mX = transform.eulerAngles.x;
mY = transform.eulerAngles.y;
}
void LateUpdate()
{
if (target != null && Input.GetMouseButton(0))
{
mX += Input.GetAxis("Mouse X") * speedX * Time.deltaTime;
mY -= Input.GetAxis("Mouse Y") * speedY * Time.deltaTime;
mY = ClampAngle(mY, minLimitY, maxLimitY);
}
distance -= Input.GetAxis("Mouse ScrollWheel") * zoomSpeed;
distance = Mathf.Clamp(distance, minDistance, maxDistance);
Quaternion mRotation = Quaternion.Euler(mY, mX, 0);
Vector3 mPosition = mRotation * new Vector3(0, 0, -distance) + target.position;
if (isNeedDamping)
{
transform.rotation = Quaternion.Lerp(transform.rotation, mRotation, Time.deltaTime * damping);
transform.position = Vector3.Lerp(transform.position, mPosition, Time.deltaTime * damping);
}
else
{
transform.rotation = mRotation;
transform.position = mPosition;
}
}
//限定角度
private float ClampAngle(float angle, float min, float max)
{
if (angle < -360) angle += 360;
if (angle > 360) angle -= 360;
return Mathf.Clamp(angle, min, max);
}
}
相关文章推荐
- 【Unity 3D学习】获取鼠标滑动方向(上下左右)-控制摄像机围绕物体旋转
- Unity3D开发之控制摄像机围绕物体旋转 平移 缩放
- 控制摄像机围绕目标旋转观察
- 鼠标控制摄像机围绕物体旋转拍摄
- unity 鼠标控制摄像机围绕物体旋转
- Unity实现摄像机围绕物体旋转
- 物体围绕某个点旋转一定角度
- 摄像机围绕0.0.0点旋转并显示FPS值
- three.js实现围绕某物体旋转
- unity3d一个物体围绕另一个物体旋转
- 如何让摄像机跟随你的角色,并且按鼠标右键围绕旋转
- Unity3d实现物体围绕某一点进行旋转
- Unity中摄像机绕物体旋转和拉近拉远视角的操作
- 用unity3d做一个物体围绕另外一个物体旋转。
- Unity物体或摄像机的旋转缩放
- 摄像机围绕0.0.0点旋转并显示FPS值
- unity3d 相机围绕某个物体旋转,四元数*位置
- 使物体围绕中心点转动(可用于电风扇等的旋转)
- Unity_简单的摄像机绕物体旋转
- 让物体围绕自身某一点旋转的方法 Unity