第一种,  按住鼠标的右键进行移动视角,同时滚轮调正视角大小。

public Transform target;    //相机追随目标public float xSpeed = 200;  //X轴方向拖动速度public float ySpeed = 200;  //Y轴方向拖动速度public float mSpeed = 10;   //放大缩小速度public float yMinLimit = -50; //在Y轴最小移动范围public float yMaxLimit = 50; //在Y轴最大移动范围public float distance = 10;  //相机视角距离public float minDinstance = 2; //相机视角最小距离public float maxDinstance = 30; //相机视角最大距离public float x = 0.0f;public float y = 0.0f;public float damping = 5.0f;public bool needDamping = true;void Start(){Vector3 angle = transform.eulerAngles;x = angle.y;y = angle.x;}void LateUpdate() //处理相机部分{if (target){if (Input.GetMouseButton(1)){x += Input.GetAxis("Mouse X") * xSpeed * 0.02f;y -= Input.GetAxis("Mouse Y") * ySpeed * 0.02f;y = ClamAngle(y, yMinLimit, yMaxLimit);}distance -= Input.GetAxis("Mouse ScrollWheel") * mSpeed;distance = Mathf.Clamp(distance, minDinstance, maxDinstance);Quaternion rotation = Quaternion.Euler(y, x, 0.0f);Vector3 disVector = new Vector3(0.0f, 0.0f, -distance);Vector3 position = rotation * disVector + target.position;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;}}}static float ClamAngle(float angle, float min, float max){if (angle < -360){angle += 360;}if (angle > 360){angle -= 360;}return Mathf.Clamp(angle, min, max);}

效果:


第二种,  不用按住鼠标即可移动相机视角,但不能用滚轮调整视角大小(代码一般,不建议用)

public GameObject cube;//获取角色,不推荐这个做法,建议测试使用Quaternion camaeraXAngle;//获取鼠标X轴偏移量当摄像机旋转角度Quaternion camaeraYAngle;//获取鼠标Y轴偏移量当摄像机旋转角度void LateUpdate(){if (Input.GetAxis("Mouse X") > 0.2)//当鼠标X轴偏移量大于0.3时执行,鼠标偏移量过小不执行(玩家也许只是想上下旋转摄像机但是难免会造成X轴偏移,所以当X轴偏移过小时不执行){camaeraXAngle = Quaternion.Slerp(camaeraXAngle, Quaternion.Euler(0, Input.GetAxis("Mouse X"), 0), 0.1f);      //平滑设置旋转角度transform.rotation *= camaeraXAngle;//旋转}else if (Input.GetAxis("Mouse X") < -0.2){camaeraXAngle = Quaternion.Slerp(camaeraXAngle, Quaternion.Euler(0, Input.GetAxis("Mouse X"), 0), 0.1f);transform.rotation *= camaeraXAngle;}if (Input.GetAxis("Mouse Y") < -0.2 && this.transform.rotation.x > 0.15){camaeraYAngle = Quaternion.Slerp(camaeraYAngle, Quaternion.Euler(Input.GetAxis("Mouse Y"), 0, 0), 0.1f);transform.rotation *= camaeraYAngle;}else if (Input.GetAxis("Mouse Y") > 0.2 && this.transform.rotation.x < 0.5){camaeraYAngle = Quaternion.Slerp(camaeraYAngle, Quaternion.Euler(Input.GetAxis("Mouse Y"), 0, 0), 0.1f);transform.rotation *= camaeraYAngle;}this.transform.position = (this.transform.rotation * new Vector3(0, 0, -5) + cube.transform.position);//摄像机的位置设置this.transform.LookAt(cube.transform);//摄像机看向角色}

效果:


第三种,  不用鼠标控制移动视角,但可以用滚轮控制视角大小,同时当人物移动时相机会丝滑的移动到角色背后(推荐)

public Transform target;public float distanceUp = 10f;//相机与目标的竖直高度参数public float distanceAway = 10f;//相机与目标的水平距离参数public float smooth = 2f;//位置平滑移动插值参数值public float camDepthSmooth = 20f;void Update(){// 鼠标轴控制相机的远近if ((Input.mouseScrollDelta.y < 0 && Camera.main.fieldOfView >= 3) || Input.mouseScrollDelta.y > 0 && Camera.main.fieldOfView <= 80){Camera.main.fieldOfView += Input.mouseScrollDelta.y * camDepthSmooth * Time.deltaTime;}}void LateUpdate(){//计算出相机的位置Vector3 disPos = target.position + Vector3.up * distanceUp - target.forward * distanceAway;transform.position = Vector3.Lerp(transform.position, disPos, Time.deltaTime * smooth);//相机的角度transform.LookAt(target.position);}

效果:


这就是我目前整理的三种可用于第三人称游戏的相机控制,希望能帮助到你!

Unity3D中,鼠标控制相机视角并且跟随玩家的几种方法(第三人称)的学习整理相关推荐

  1. Unity3d实现鼠标控制相机绕物体旋转(带阻尼)

    Unity3d实现鼠标控制相机绕物体旋转(带阻尼) 本来想的是用四元数实现球性插值实现阻尼效果,但是不知道四元数怎么绕定点旋转.因此用速度衰减的方法进行实现. 1.实现鼠标控制相机带阻尼旋转 2.实现 ...

  2. 如何将unity3d动画嵌入html,在Unity3D中使用精灵动画引擎制作动画的两种方法

    7月28日消息,如今的游戏玩家对于游戏角色的动作要求越来越高,给开发者提出了众多的要求,工作量也相应上升.那么如何才能简单快速地制作角色动画以提升效率呢?下面就和大家分享两个在Unity3D中使用精灵 ...

  3. 在Unity3D中使用精灵动画引擎制作动画的两种方法

    本文节选翻译自Gamasutra社区博客,文中观点仅代表作者本人意见,与本公众号无关. 在Unity3D中使用精灵动画引擎的两种方法 本文将介绍两种简单快捷的方法来制作游戏角色动画. 1.动画和动画控 ...

  4. 【Unity】通过鼠标控制相机视角(拉近拉远/选择角度)

    今天优化项目的时候,发现观察物体的视角有些问题,所以就自己写了一些代码,同时参考了一些网上大佬们的写法,改了改,写出来了一篇如下的代码: 功能: 鼠标中间控制视角远近 鼠标右键控制视角旋转 priva ...

  5. Cesium 键盘鼠标控制相机漫游(源码+原理讲解)

    Cesium 键盘鼠标控制相机漫游(源码+原理讲解) 在各大博客平台上,Cesium使用键盘控制相机漫游的源码已经有不少人贴出源码,本人在浏览这些源码的过程中发现大家采用的方式基本一致,大部分代码都是 ...

  6. Unity 基础 之 鼠标控制 相机(摄像机Camera)的旋转,移动和 fov 的简单使用整理

    Unity 基础 之 鼠标控制 相机(摄像机Camera)的旋转,移动和 fov 的简单使用整理 目录 Unity 基础 之 鼠标控制 相机(摄像机Camera)的旋转,移动和 fov 的简单使用整理 ...

  7. 【虚拟仿真】Unity3D中实现控制物体的旋转、移动、缩放

    推荐阅读 CSDN主页 GitHub开源地址 Unity3D插件分享 简书地址 我的个人博客 大家好,我是佛系工程师☆恬静的小魔龙☆,不定时更新Unity开发技巧,觉得有用记得一键三连哦. 一.前言 ...

  8. Unity 在zSpace上使用鼠标控制相机旋转和鼠标指引式放大缩小,在触屏上手势位置为中心放大缩小

    在zSpace上使用鼠标控制相机旋转和鼠标指引式放大缩小,在触屏上手势位置为中心放大缩小 鼠标和触屏的操作 下面展示一些 内联代码片. using System; using System.Colle ...

  9. 相机标定 matlab opencv ROS三种方法标定步骤(1)

    一 . 理解摄像机模型,网上有很多讲解的十分详细,在这里我只是记录我的整合出来的资料和我的部分理解 计算机视觉领域中常见的三个坐标系:图像坐标系,相机坐标系,世界坐标系,实际上就是要用矩阵来表 示各个 ...

最新文章

  1. timer 公司内部用法
  2. python面试总结 博客园_python面试题总结
  3. HTTP.sys 远程执行代码验证工具
  4. Oracle11g数据库在win7系统上的安装教程
  5. cat/tac/more/less 命令详解
  6. HTML页面转换asp,将asp页面转换成html页面 代码
  7. ionic-CSS:ionic 列表
  8. Python命令行选项参数解析策略
  9. 天翼云从业认证(1.3)了解数据库的概念、SQL、关系型数据库、大数据和 NoSQL 数据库
  10. python中 __init__.py的例程
  11. jquery 判断数据是否重复
  12. 天文学专业在什么时候学计算机,南京大学在985排名第几?南京大学最牛的专业是天文系吗?...
  13. 大学生研究生必备的数据竞赛平台
  14. xdf文件改word_真正Txt 文本文件和Doc Word文件批量互转工具
  15. 弘辽科技:你吃的粽子,撑起百亿市场
  16. 【语音处理】时域信号分析基本工具,什么是窗函数
  17. 二叉树叶子结点个数统计
  18. 基于opencv的手指静脉识别(附源码)
  19. 20个常用教育心理学效应
  20. Boxy Vehicle Detection in Large Images

热门文章

  1. python求15的因数_十五道Python小案例,学会这些,Python基础已过关!
  2. RHCE 7.0 考试命令整理
  3. c语言定义禁止优化变量,c语言防止优化
  4. Django Web 开发极简实战
  5. 为什么Hashtab的大小通常取远离2^n 的素数
  6. 订酒店接口 携程酒店在线预订
  7. @Test有什么作用
  8. vscode 使用code runner配置c++11
  9. 联想全系列官方WIN10工具
  10. 4016: 辉夜的夜空明珠