在Update函数中执行:
- if (turnAround)
- {
- playerCamera.RotateAround(transform.localPosition, transform.up, Time.deltaTime * rotateSpeed);
- degree += Time.deltaTime * rotateSpeed;
- if (degree >= 360)
- {
- turnAround = false;
- degree = 0;
- }
- }
补充:unity 摄像机围绕某个物体进行旋转放大缩小
脚本通过以一个物体为中心点
来控制摄像机围绕物体旋转缩放 ,脚本挂在摄像机上即可,target是需要观看的物体
- public Transform Camera2;
- public GameObject target;
- private float dis;
- public float xSpeed = 200, ySpeed = 200, mSpeed = 10; //移动速度
- public float yMinLimit = -50, yMaxLimit = 50; //摄像机的Y轴移动最小最大限制
- public float distance = 7, minDistance = 2, maxDistance = 30; //摄像机与目标物体的距离
- public bool needDamping = true; //阻尼默认开启
- float damping = 5.0f; //默认阻尼为5.0F
- public float x = 0.0f; //X轴
- public float y = 0.0f; //Y轴
- // Use this for initialization
- void Start() {
- instance = this;
- Camr = Camera2Rotation.Close;
- Vector3 angles = transform.eulerAngles;
- x = angles.y;
- y = angles.x;
- }
- private void Update()
- {
- }
- void LateUpdate()
- {
- //使用按下鼠标左键移动物体
- 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);
- }
- distance -= Input.GetAxis("Mouse ScrollWheel") * mSpeed;
- distance = Mathf.Clamp(distance, minDistance, maxDistance);
- Quaternion rotation = Quaternion.Euler(y, x, 0.0f);
- Vector3 disVector = new Vector3(0.0f, 0.0f, -distance);
- Vector3 position = rotation * disVector + target.transform.position;
- //adjust the camera
- if (needDamping)
- {
- transform.rotation = Quaternion.Lerp(transform.rotation, rotation, Time.deltaTime * damping);
- transform.position = Vector3.Lerp(transform.position, position, Time.deltaTime * damping);
- }
- else
- {
- transform.rotation = rotation;
- transform.position = position;
- }
- }
- /// <summary>
- /// 旋转角度的控制
- /// </summary>
- /// <param name="angle">旋转的角度</param>
- /// <param name="min">最小角度</param>
- /// <param name="max">最大角度</param>
- /// <returns></returns>
- 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);
- }
- void MoveCameraToTarget()
- {
- if (target != null)
- {
- Camera2.LookAt(target.transform);
- Camera2.position = Vector3.MoveTowards(Camera2.position, target.transform.position, 5 * Time.deltaTime);
- dis = Vector3.Distance(Camera2.transform.position, target.transform.position);
- if (dis < 1.5f)
- {
- Camr = Camera2Rotation.Open;
- CancelInvoke();
- }
- }
- }
以上为个人经验,希望能给大家一个参考,也希望大家多多支持w3xue。如有错误或未考虑完全的地方,望不吝赐教。