当前位置:   article > 正文

Unity如何实现第三人称相机跟随_unity第三人称摄像机跟随

unity第三人称摄像机跟随

效果

我们需要实现简易的,泛用性高的第三人称相机跟随,通过鼠标滚轮可以控制与对象物体的远近距离,按住鼠标右键拖动鼠标可以控制相机视角跟随物体旋转,并且相机始终朝向游戏对象。

实现步骤

1.在层级区域把主相机拖入玩家物体作为玩家的子层级,并且调整好适当的距离。

2.因为后期会用到标签查找,所以需要在右上角Inspector区域把玩家的标签设置为“Player”。

3.创建脚本,脚本名称为“CameraFollow”,创建完后挂载到相机上。(脚本名称也可以自拟,但是复制时要注意名字,Unity中的代码文件名和代码中的命名空间一定要一致

编辑脚本(逻辑和参数含义已注释):

  1. using System.Collections;
  2. using System.Collections.Generic;
  3. using UnityEngine;
  4. public class CameraFollow : MonoBehaviour {
  5. private Transform player;//玩家位置
  6. private Vector3 offsetPosition; //位置偏移
  7. private bool mouse1Down;//是否按下鼠标右键
  8. public float distance;
  9. public float scrollSpeed = 10;//视野远近变化的速度
  10. public float RotateSpeed = 2;//相机镜头转向的速度
  11. void Start()
  12. {
  13. player = GameObject.FindGameObjectWithTag("Player").transform;//查找对象
  14. transform.LookAt(player.position);//相机指向player
  15. offsetPosition = transform.position - player.position;//计算位置偏移量
  16. }
  17. void Update()
  18. {
  19. transform.position = offsetPosition + player.position;//更新相机位置
  20. Rotate();
  21. Scroll();
  22. }
  23. void Scroll()//鼠标滑轮拉近拉远视野
  24. {
  25. distance = offsetPosition.magnitude;//把偏移向量的模长赋值
  26. distance -= Input.GetAxis("Mouse ScrollWheel") * scrollSpeed;
  27. distance = Mathf.Clamp(distance, 2, 20);//限制镜头缩放最远以及最近距离
  28. offsetPosition = offsetPosition.normalized * distance;//更新偏移向量
  29. }
  30. void Rotate()//按下鼠标右键后移动鼠标更新视角
  31. {
  32. if (Input.GetMouseButtonDown(1))//按下鼠标右键
  33. {
  34. mouse1Down = true;
  35. }
  36. if (Input.GetMouseButtonUp(1))//弹起鼠标右键
  37. {
  38. mouse1Down = false;
  39. }
  40. if (mouse1Down)//设置鼠标左右移动后相机的位置变化
  41. {
  42. transform.RotateAround(player.position, player.up, RotateSpeed * Input.GetAxis("Mouse X"));//设置水平环绕旋转
  43. Vector3 originalPos = transform.position;
  44. Quaternion originalRotation = transform.rotation;
  45. transform.RotateAround(player.position, transform.right, -RotateSpeed * Input.GetAxis("Mouse Y"));//设置竖直环绕旋转
  46. //垂直和水平都会影响两个值
  47. float x = transform.eulerAngles.x;
  48. if (x < 10 || x > 80)//限制最大、最小俯仰角度
  49. {
  50. transform.position = originalPos;
  51. transform.rotation = originalRotation;
  52. }
  53. }
  54. offsetPosition = transform.position - player.position;
  55. }
  56. }

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/weixin_40725706/article/detail/122964
推荐阅读
相关标签
  

闽ICP备14008679号