1. using System.Collections;
  2. using System.Collections.Generic;
  3. using UnityEngine;
  4.  
  5. public class Player : MonoBehaviour {
  6. public GameObject CapsulePlayer, MainCamerahead;
  7. private float aixsX, aixsY, mouseScroll;
  8. private int moveSpeed;
  9. private int standardMoveSpeed = ;
  10. private int runMoveSpeed = ;
  11. private int mouseScrollSpeed = ;
  12. private float mouseScrolbackSpeed = 0.05f;
  13. private CharacterController charaControl;
  14. private Camera charaCam;
  15. public float mouseNumOne = , mouseNumTwo = ;
  16. public static bool chufa = false;
  17. void Awake()
  18. {
  19. charaControl = GetComponent<CharacterController>();
  20. charaCam = MainCamerahead.GetComponent<Camera>();
  21. }
  22. void Update()
  23. {
  24. aixsX = Input.GetAxis("Horizontal");
  25. aixsY = Input.GetAxis("Vertical");
  26. mouseScroll = Input.GetAxis("Mouse ScrollWheel");
  27. if (Input.GetKey(KeyCode.LeftShift))
  28. {
  29. moveSpeed = runMoveSpeed;
  30. }
  31. else
  32. {
  33. moveSpeed = standardMoveSpeed;
  34. }
  35.  
  36. charaControl.SimpleMove(transform.forward * moveSpeed * aixsY * 0.02f + transform.right * moveSpeed * aixsX * 0.02f);
  37.  
  38. /* ***********************镜头跟随鼠标移动的第一种方法**********************
  39. float mousex = Input.GetAxis("Mouse X") * 2f;
  40. float mousey = Input.GetAxis("Mouse Y") * 2f;
  41. if (mousex > 180)
  42. {
  43. mousex = 180;
  44. }
  45. else if (mousex < -180)
  46. {
  47. mousex = -180;
  48. }
  49. if (Mathf.Abs(mousey) < 120f)
  50. {
  51. MainCamerahead.transform.localRotation = charaCam.transform.localRotation * Quaternion.Euler(-mousey, 0, 0);
  52. CapsulePlayer.transform.localRotation = transform.localRotation * Quaternion.Euler(0, mousex, 0);
  53. }
  54. */
  55.  
  56. //镜头跟随鼠标移动的第二种写法 (总之写法有很多,自己用着舒服就行)
  57. if (chufa )
  58. {
  59. mouseNumOne += Input.GetAxis("Mouse Y");
  60. mouseNumTwo += Input.GetAxis("Mouse X");
  61. if (mouseNumOne > )
  62. {
  63. mouseNumOne = ;
  64. }
  65. else if (mouseNumOne < -)
  66. {
  67. mouseNumOne = -;
  68. }
  69. if (Mathf.Abs(mouseNumOne) < 90f)
  70. {
  71. MainCamerahead.transform.Rotate(new Vector3(- * Input.GetAxis("Mouse Y"), , ));
  72. CapsulePlayer.transform.Rotate(, 1.6f * Input.GetAxis("Mouse X"), );
  73. }
  74. }
  75. else
  76. {
  77. //鼠标滑动镜头跟着滑动
  78. if (Input.GetMouseButton())
  79. {
  80. mouseNumOne += Input.GetAxis("Mouse Y");
  81. mouseNumTwo += Input.GetAxis("Mouse X");
  82. if (mouseNumOne > )
  83. {
  84. mouseNumOne = ;
  85. }
  86. else if (mouseNumOne < -)
  87. {
  88. mouseNumOne = -;
  89. }
  90. if (Mathf.Abs(mouseNumOne) < 90f)
  91. {
  92. MainCamerahead.transform.Rotate(new Vector3(- * Input.GetAxis("Mouse Y"), , ));
  93. CapsulePlayer.transform.Rotate(, 1.6f * Input.GetAxis("Mouse X"), );
  94. }
  95. }
  96. }
  97.  
  98. //放大缩小功能
  99.  
  100. if (charaCam.fieldOfView > )
  101. {
  102. charaCam.fieldOfView -= mouseScrolbackSpeed;
  103. }
  104. else if (charaCam.fieldOfView < )
  105. {
  106. charaCam.fieldOfView += mouseScrolbackSpeed;
  107. }
  108. else
  109. {
  110. charaCam.fieldOfView -= mouseScroll * mouseScrollSpeed;
  111. }
  112. }
  113. }

Demo链接:https://pan.baidu.com/s/1s8At3pMXI94-6Ri14_JvPw
提取码:1cbw

代码写的不好,大家多多包涵。

unity Camera第一人称移动,3中方法实现的更多相关文章

  1. 关于Unity中FPS第一人称射击类游戏制作(专题十)

    当前Unity最新版本5.6.3f1,我使用的是5.5.1f1 场景搭建 1: 导入人物模型, 手持一把枪;2: 导入碎片模型;3: 创建一个平面;4: 创建一个障碍物;5: 导入人物模型;6: 配置 ...

  2. unity中制作模拟第一人称视角下的指南针

    private int zRotation; public GameObject obj; public void Update() { //obj = GameObject.Find("C ...

  3. unity中自制模拟第一人称视角

    public float sensitivityX = 5f; public float sensitivityY = 5f; public float sensitivetyKeyBoard = 0 ...

  4. 【Unity3D】Unity自带组件—完成第一人称人物控制

    1.导入unity自带的Character Controllers包 2.可以看到First Person Controller组件的构成 Mouse Look() : 随鼠标的移动而使所属物体发生旋 ...

  5. Unity——第一人称控制器的实现

    Unity--第一人称控制器的实现 一.功能描述 在一个场景中实现人物的前后左右移动和跳跃功能:其中前后左右移动通过W.A.S.D方向键实现,跳跃功能通过空格键实现,并且考虑到重力作用,来调节跳跃功能 ...

  6. C#开发Unity游戏教程之Unity中方法的参数

    C#开发Unity游戏教程之Unity中方法的参数 Unity的方法的参数 出现在脚本中的方法,无论是在定义的时候,还是使用的时候,后面都跟着一对括号“( )”,有意义吗?看起来最多也就是起个快速识别 ...

  7. [3D]第一人称相机类Camera

    自己根据C++ D3D的源码改写一个相机类(第一人称). using System; using System.Collections.Generic; using System.Linq; usin ...

  8. D3D游戏编程系列(六):自己动手编写第一人称射击游戏之第一人称视角的构建

    说起第一人称射击游戏,不得不提第一人称视角啊,没有这个,那么这个第一就无从谈起啊,我作为一个观察者究竟如何在这个地图上顺利的移动和观察呢,那么,我们一起来研究下. 我们首先来看下CDXCamera类: ...

  9. 基于HTML5及WebGL开发的2D3D第一人称漫游进行碰撞检测

    为了实现一个基于HTML5的场景小游戏,我采用了HT for Web来实现,短短200行代码,我就能实现用“第一人称”来操作前进后退上下左右,并且实现了碰撞检测. 先来看下实现的效果:http://h ...

随机推荐

  1. java 多线程 synchronized与lock的通信机制等问题,结合相应实例说明

    1. 利用多线程实现如下需求: 写两个线程,一个线程打印1~52,另一个线程打印A~Z,打印顺序是12A34B...5152Z: 2. 使用synchronized 实现 public class T ...

  2. HBase读写的几种方式(二)spark篇

    1. HBase读写的方式概况 主要分为: 纯Java API读写HBase的方式: Spark读写HBase的方式: Flink读写HBase的方式: HBase通过Phoenix读写的方式: 第一 ...

  3. 一次多个数据库tnsping及登录单点登录需求

    [环境介绍] 系统环境:Linux + Oracle 11.2.0.4.0 + python 2.7.10 [背景描述] 需求:因为涉及生产数据库较多,业务夸多个数据库使用.当收到业务有些影响时,数据 ...

  4. 读取FTP上的某个文本文档内容到本地

    /// <summary> /// 读取FTP服务器文本内容 /// </summary> /// <param name="strPath"> ...

  5. vagrant极简教程:快速搭建centos7

    作为开发人员,只要你的应用最终是放在linux环境执行,那么最好就是将本地开发环境也线上一致.不管是用windows系统,还是mac系统,即使你本地程序跑得好好的,也经常会出现一上线就各种bug的现象 ...

  6. linux文件常用命令

    文件管理不外乎文件或目录的创建.删除.查询.移动,有mkdir/rm/mv 2.1. 创建和删除 创建:mkdir 删除:rm 删除非空目录:rm -rf file目录 删除日志 rm *log (等 ...

  7. 【gitlab】gitlab快速部署教程

    gitlab快速部署教程 部署环境 Ubuntu 16.04(亲测可用) 开始部署 安装依赖 sudo apt-get install curl openssh-server ca-certifica ...

  8. MySQL插入中文数据出现?号

    原文转载自:https://blog.csdn.net/LynneZoe/article/details/79174119 运行环境:win10 mysql版本:Mysql5.6 做一个项目的时候,向 ...

  9. Loading class `com.mysql.jdbc.Driver'. The new driver class is `com.mysql.cj.jdb 问题

    是因为最新的数据库驱动的原因,用较早的版本就可以了. <dependency> <groupId>mysql</groupId> <artifactId> ...

  10. java实现一个简单的Web服务器

    注:本段内容来源于<JAVA 实现 简单的 HTTP服务器> 1. HTTP所有状态码 状态码 状态码英文名称 中文描述 100 Continue 继续.客户端应继续其请求 101 Swi ...