当前位置:   article > 正文

unity-第三人称摄像机简单脚本(包括跟随、视角旋转、滚轮缩放)_unity物体跟着摄像机转动代码

unity物体跟着摄像机转动代码

本菜鸟为了实现第三人称视角摄像机的主要功能,踩了很多意料之外的坑,终于搞出一份自觉完美的脚本,分享一下。

功能:摄像机跟随、鼠标滚轮缩放视野、长按鼠标右键左右旋转视野、长按鼠标中键上下旋转视野。

此脚本挂接在摄像机上,有详细注释,可直接运行。

  1. public GameObject target;//目标物体
  2. Vector3 offset;//相机跟随的偏移量
  3. void Start()
  4. {
  5. //保证摄像机看向目标物体,且z轴旋转度是0
  6. transform.LookAt(target.transform.position);
  7. transform.eulerAngles = new Vector3(transform.eulerAngles.x, transform.eulerAngles.y, 0);
  8. //得到摄像机与物体之间的初始偏移量
  9. offset = target.transform.position - transform.position;
  10. }
  11. void LateUpdate()
  12. {
  13. Rotate();
  14. Rollup();
  15. Follow();
  16. }
  17. //摄像机跟随、滚轮缩放功能:
  18. public float zoomSpeed = 1f; // 视野的缩放速度
  19. float zoom;//滚轮滚动量
  20. void Follow()
  21. {
  22. //视野缩放
  23. zoom = Input.GetAxis("Mouse ScrollWheel") * zoomSpeed; // 获取滚轮滚动量
  24. if (zoom != 0) // 如果有滚动
  25. {
  26. offset -= zoom * offset;
  27. }
  28. //镜头跟随
  29. transform.position = target.transform.position - offset;
  30. }
  31. //左右旋转、上下旋转功能:
  32. public float rotationSpeed = 500f;//摄像机旋转速度
  33. private bool isRotating, lookup = false;
  34. float mousex, mousey;
  35. void Rotate()
  36. {
  37. if (Input.GetMouseButtonDown(1))//长按鼠标右键
  38. {
  39. isRotating = true;
  40. }
  41. if (Input.GetMouseButtonUp(1))
  42. {
  43. isRotating = false;
  44. }
  45. if (isRotating)
  46. {
  47. //得到鼠标x方向移动距离
  48. mousex = Input.GetAxis("Mouse X") * rotationSpeed * Time.deltaTime;
  49. //旋转轴的位置是目标物体处,方向是世界坐标系的y轴
  50. transform.RotateAround(target.transform.position, Vector3.up, mousex);
  51. //每次旋转后更新偏移量
  52. offset = target.transform.position - transform.position;
  53. }
  54. }
  55. void Rollup()
  56. {
  57. if (Input.GetMouseButtonDown(2))//长按鼠标中键
  58. {
  59. lookup = true;
  60. }
  61. if (Input.GetMouseButtonUp(2))
  62. {
  63. lookup = false;
  64. }
  65. if (lookup)
  66. {
  67. //得到鼠标y方向移动距离
  68. mousey = Input.GetAxis("Mouse Y") * rotationSpeed * Time.deltaTime;
  69. //旋转轴的位置在目标物体处,方向是摄像机的x轴
  70. transform.RotateAround(target.transform.position, transform.right, mousey);
  71. //每次旋转后更新偏移量
  72. offset = target.transform.position - transform.position;
  73. }
  74. }
本文内容由网友自发贡献,转载请注明出处:https://www.wpsshop.cn/w/笔触狂放9/article/detail/272384
推荐阅读
相关标签
  

闽ICP备14008679号