CameraRotateAround.cs 2.5 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485
  1. using UnityEngine;
  2. using System.Collections;
  3. /**
  4. * 备注:本脚本必须赋予主镜头
  5. */
  6. public class CameraRotateAround : MonoBehaviour
  7. {
  8. public Transform target;//主相机要围绕其旋转的物体
  9. public float distance = 7.0f;//主相机与目标物体之间的距离
  10. public float xSpeed = 70.0f;//主相机水平方向旋转速度
  11. public float minAngleX = -15;
  12. public float maxAngleX = 15;
  13. public Vector3 offset;
  14. private bool rotated = false;
  15. private float eulerAngles_x;
  16. private float eulerAngles_y;
  17. private float initAngleX = 0;
  18. private float minAngle = 0;
  19. private float maxAngle = 0;
  20. private float movedAngle = 0;
  21. private Vector3 dir;
  22. void LateUpdate()
  23. {
  24. if (rotated)
  25. {
  26. movedAngle += ((Input.GetAxis("Mouse X") * this.xSpeed) * this.distance) * 0.02f;
  27. if(movedAngle <= minAngle)
  28. {
  29. movedAngle = minAngle;
  30. }else if(movedAngle >= maxAngle)
  31. {
  32. movedAngle = maxAngle;
  33. }
  34. Quaternion quaternion = Quaternion.Euler(0, movedAngle, 0);
  35. Vector3 vector = ((Vector3)(quaternion * this.offset)) + BattleMgr.Instance.Battle.TeamCenter;
  36. this.transform.rotation = Quaternion.Euler(this.eulerAngles_y, movedAngle + initAngleX, 0);
  37. this.transform.position = vector;
  38. //this.eulerAngles_x += ((Input.GetAxis("Mouse X") * this.xSpeed) * this.distance) * 0.02f;
  39. //Quaternion quaternion = Quaternion.Euler(0, this.eulerAngles_x - initAngleX,0);
  40. //Vector3 vector = ((Vector3)(quaternion * this.offset)) + BattleMgr.Instance.Battle.TeamCenter;
  41. //this.transform.rotation = Quaternion.Euler(this.eulerAngles_y, this.eulerAngles_x,0);
  42. //this.transform.position = vector;
  43. }
  44. }
  45. public void StartRotate()
  46. {
  47. if (this.target == null) return;
  48. Vector3 eulerAngles = this.transform.eulerAngles;//当前物体的欧拉角
  49. this.eulerAngles_x = eulerAngles.y;
  50. this.eulerAngles_y = eulerAngles.x;
  51. minAngle = this.minAngleX + this.target.eulerAngles.y;
  52. maxAngle = this.maxAngleX + this.target.eulerAngles.y;
  53. initAngleX = this.eulerAngles_x;
  54. movedAngle = 0;
  55. rotated = true;
  56. dir = new Vector3(0, 0, 1);
  57. this.offset = this.transform.position - BattleMgr.Instance.Battle.TeamCenter;
  58. }
  59. public void StopRotate()
  60. {
  61. rotated = false;
  62. }
  63. }