1 using UnityEngine;
 2 using System.Collections;
 3 /*
 4  * 第三人称摄像机常用控制
 5 */
 6 public class CameraCS : MonoBehaviour {
 7
 8     private Transform player;
 9     private Vector3 offsetPosition;
10     private float distance;
11     private float scrollSpeed = 10; //鼠标滚轮速度
12     private bool isRotating; //开启摄像机旋转
13     private float rotateSpeed = 2; //摄像机旋转速度
14     // Use this for initialization
15
16     void Awake(){
17         player = GameObject.FindGameObjectWithTag ("Player").transform;
18     }
19
20     void Start () {
21         //摄像机朝向player
22         transform.LookAt (player.position);
23         //获取摄像机与player的位置偏移
24         offsetPosition = transform.position - player.position;
25     }
26
27     // Update is called once per frame
28     void Update () {
29         //摄像机跟随player与player保持相对位置偏移
30         transform.position = offsetPosition + player.position;
31         //摄像机的旋转
32         RotateView ();
33         //摄像机的摄影控制
34         ScrollView ();
35     }
36
37     void ScrollView(){
38         //返回位置偏移的向量长度
39         distance = offsetPosition.magnitude;
40
41         //根据鼠标滚轮的前后移动获取变化长度
42         distance -= Input.GetAxis ("Mouse ScrollWheel") * scrollSpeed;
43
44         //限制变化长度的范围在最小为4最大为22之间
45         distance = Mathf.Clamp (distance,4,22);
46
47         //新的偏移值为偏移值的单位向量*变换长度
48         offsetPosition = offsetPosition.normalized * distance;
49
50         //打印变化长度
51         Debug.Log (distance);
52     }
53
54     void RotateView(){
55         //获取鼠标在水平方向的滑动
56         Debug.Log(Input.GetAxis ("Mouse X"));
57         //获取鼠标在垂直方向的滑动
58         Debug.Log(Input.GetAxis("Mouse Y"));
59
60         //按下鼠标右键开启旋转摄像机
61         if (Input.GetMouseButtonDown(1)) {
62             isRotating = true;
63         }
64
65         //抬起鼠标右键关闭旋转摄像机
66         if (Input.GetMouseButtonUp(1)) {
67             isRotating = false;
68         }
69
70         if (isRotating) {
71
72             //获取摄像机初始位置
73             Vector3 pos = transform.position;
74             //获取摄像机初始角度
75             Quaternion rot = transform.rotation;
76
77             //摄像机围绕player的位置延player的Y轴旋转,旋转的速度为鼠标水平滑动的速度
78             transform.RotateAround(player.position,player.up,Input.GetAxis("Mouse X") * rotateSpeed);
79
80             //摄像机围绕player的位置延自身的X轴旋转,旋转的速度为鼠标垂直滑动的速度
81             transform.RotateAround (player.position, transform.right, Input.GetAxis ("Mouse Y") * rotateSpeed);
82
83             //获取摄像机x轴向的欧拉角
84             float x = transform.eulerAngles.x;
85
86             //如果摄像机的x轴旋转角度超出范围,恢复初始位置和角度
87             if (x<10 || x>80) {
88                 transform.position = pos;
89                 transform.rotation = rot;
90             }
91         }
92
93         //更新摄像机与player的位置偏移
94         offsetPosition = transform.position - player.position;
95     }
96 }

转载于:https://www.cnblogs.com/yuge790615/p/5580905.html

Unity3d--第三人称摄像机常用控制相关推荐

  1. Unity3D第三人称摄像机控制脚本

    好久没有敲Blog该.感谢您的留言.注意.私人信件和其他支持,但我似乎没有办法继续自己曾经写了一篇博客系列,因为我在网上找到有关unity3D太少的内容,U3D相关的文章!.. 第三人称视角 第三人称 ...

  2. Unity3D第三人称视角摄像机、跟随与球面旋转

    Unity3D第三人称视角摄像机.跟随与球面旋转 逻辑释义 图解分析 Unity C#代码 逻辑释义 [关键transform] 1[玩家] 2[注视目标点] 3[摄像机] [摄像机]跟随[注视目标点 ...

  3. Unity Cinemachine之第三人称摄像机CinemachineFreeLook属性详解

    演示 CinemachineFreeLook是一个第三人称视角相机插件,功能非常强大,内置了很多属性可以供开发者根据需求进行调整. 创建   首先是Cinemachine插件的导入,如果是2018以后 ...

  4. Unity 第三人称 摄像机

    今天主要是简单的模拟下吃鸡游戏的第三人称摄像机的实现. 观察 我们玩过吃鸡手游的都知道,吃鸡的人物跟随的摄像机有两种状态 1. 滑动屏幕的时候,摄像机左右上下移动,人物也会跟随着左右移动,上下抬头低头 ...

  5. UnityStandardAsset工程、源码分析_7_第三人称场景[玩家控制]_人物逻辑

    上一章地址:UnityStandardAsset工程.源码分析_6_第三人称场景[玩家控制]_工程组织 上一章里,我们花了一整章的篇幅用于分析场景的结构和处理流程,并且确定了本章的分析目标:Third ...

  6. 【Unity3D游戏开发学习笔记】(七)上帝之眼—第三人称摄像机的简单实现(跟随视角,自由视角)

    陆陆续续又开始更新自己的博客,看来自我驱动能力还是不够啊= =,废话不多说了,之前的内容大概说了一下Unity的一些基础知识,接下来我们将要对一些基本功能做一些学习.大家都知道,一个游戏,少不了摄像机 ...

  7. 【C#】【Unity】第三人称摄像机跟随人物移动时碰撞到墙壁等,摄像机不穿越墙壁

    目前大部分第三人称游戏的摄像机在遇到墙壁等狭隘空间的时候,都选择让摄像机不穿越到墙壁里面,而是让摄像机保持在墙壁表面. 分析情况:(红色方框为摄像机 黑色方框为墙壁) 当前情形摄像机还没达到墙壁摄像机 ...

  8. Blueprints - UE4第三人称游戏角色控制

    虚幻引擎4中第三人称游戏相关,UE4中Blueprint相关,个人学习笔记:

  9. 摄像机跟随之第三人称视角(一)

    在我们开发游戏的时候,总避免不了对摄像机的设置,当然,这也因为每款游戏类型不一样,所以摄像机的跟随或者说放置位置不一样,这也要求我们写出合适的算法.本篇就主要是针对第三人称视角的摄像机,进行算法设计分 ...

  10. 第三人称游戏人物控制

    学unity也有一段时间了,做了不少东西,但因为没有老师也不知道自己做得对不对.所以拿出一点东西出来让大家批评指正.随带说下我的版本是unity5.x 废话不多说进入主题,第三人称游戏我想大家肯定都接 ...

最新文章

  1. zblog php搜索页面,Z-Blog PHP实现搜索分页
  2. WPF将Ui保存为图片和保存位图
  3. mediumtext和string转换_数据库用varchar和text的差别
  4. element ui 多个子组件_ElementUI 技术揭秘(2) 组件库的整体设计
  5. 【转载】 C#使用string.IsNullOrWhiteSpace方法判断字符串是否为非空字符
  6. 一个SpringBoot项目,开发业务前至少应该引入哪些配置?
  7. shell中设置文字输出的颜色及字体格式
  8. 计算机培训中学语文研修计划,初中语文个人研修计划书
  9. mysql自动判断索引机制_Mysql优化之索引实现原理
  10. asp.net 微信小程序源码 微信分销源码 源文件完全开源 源码
  11. usbserialch340驱动安装失败_【已解决】Mac中安装USB转串口的CH340G驱动
  12. 水经注地图发布服务中间件的适用范围
  13. xtu 1369 Black White Chess
  14. 第五太阳纪终结,人类文明新开端?
  15. 第3章 Hive数据类型
  16. 从前端到全栈-基础能力-js-异步编程
  17. php sapi模式,PHP中的SAPI是什么?如何实现?(图文)
  18. 灵魂画手教你浅拷贝与深拷贝
  19. 【转】从“致加西亚的信”看自行管理
  20. 使用百度API获取地名坐标信息

热门文章

  1. 汇编语言复习摘要六——包含多个段的程序
  2. 一个MYSQL PDO相对完整且功能强大的封装类
  3. Form的method方法get和post的区别
  4. Transformer长大了,它的兄弟姐妹们呢?(含Transformers超细节知识点)
  5. 神经网络基础模型--Logistic Regression的理论和实践
  6. 恕我直言,你们的模型训练都还不够快
  7. Spark常用API(五)
  8. 博文视点学院直播:如何用产品思维解决生活中的迷茫
  9. iOS的GIF动画效果实现
  10. 正则表达式之常用量词