1.导入unity自带的Character Controllers包

  

2.可以看到First Person Controller组件的构成

  

  Mouse Look() : 随鼠标的移动而使所属物体发生旋转

  FPSInput Controller() : 控制物体的移动

3.同样的,我们为自己的模型添加以上四个组件

  

  其中Mouse Look() 中的Axes属性,是调整围绕的旋转轴

  所谓第一人称就是,鼠标左右晃动则模型以X为轴进行旋转

  鼠标上下晃动则模型的腰关节以Z轴进行旋转

4.找到模型的腰关节,同样添加Mouse Look(),Axes的值为Y,修改Mouse Look()

  1. using UnityEngine;
  2. using System.Collections;
  3.  
  4. /// MouseLook rotates the transform based on the mouse delta.
  5. /// Minimum and Maximum values can be used to constrain the possible rotation
  6.  
  7. /// To make an FPS style character:
  8. /// - Create a capsule.
  9. /// - Add the MouseLook script to the capsule.
  10. /// -> Set the mouse look to use LookX. (You want to only turn character but not tilt it)
  11. /// - Add FPSInputController script to the capsule
  12. /// -> A CharacterMotor and a CharacterController component will be automatically added.
  13.  
  14. /// - Create a camera. Make the camera a child of the capsule. Reset it's transform.
  15. /// - Add a MouseLook script to the camera.
  16. /// -> Set the mouse look to use LookY. (You want the camera to tilt up and down like a head. The character already turns.)
  17. [AddComponentMenu("Camera-Control/Mouse Look")]
  18. public class MouseLook : MonoBehaviour {
  19.  
  20. public enum RotationAxes { MouseXAndY = , MouseX = , MouseY = }
  21. public RotationAxes axes = RotationAxes.MouseXAndY;
  22. public float sensitivityX = 15F;
  23. public float sensitivityY = 15F;
  24.  
  25. public float minimumX = -360F;
  26. public float maximumX = 360F;
  27.  
  28. public float minimumY = -60F;
  29. public float maximumY = 60F;
  30.  
  31. private Vector3 eulerAngles;
  32.  
  33. float rotationY = 0F;
  34.  
  35. void LateUpdate ()
  36. {
  37. if (axes == RotationAxes.MouseXAndY)
  38. {
  39. float rotationX = transform.localEulerAngles.y + Input.GetAxis("Mouse X") * sensitivityX;
  40.  
  41. rotationY += Input.GetAxis("Mouse Y") * sensitivityY;
  42. rotationY = Mathf.Clamp (rotationY, minimumY, maximumY);
  43.  
  44. transform.localEulerAngles = new Vector3(-rotationY, rotationX, );
  45. }
  46. else if (axes == RotationAxes.MouseX)
  47. {
  48. transform.Rotate(, Input.GetAxis("Mouse X") * sensitivityX, );
  49. }
  50. else
  51. {
  52. rotationY += Input.GetAxis("Mouse Y") * sensitivityY;
  53. rotationY = Mathf.Clamp (rotationY, minimumY, maximumY);
  54. //----------********使Z轴旋转相应的鼠标偏移********----------//
  55. transform.localEulerAngles = new Vector3(eulerAngles.x,eulerAngles.y,eulerAngles.z + rotationY);
  56. }
  57. }
  58.  
  59. void Start ()
  60. {
  61. // Make the rigid body not change rotation
  62. if (GetComponent<Rigidbody>())
  63. GetComponent<Rigidbody>().freezeRotation = true;
  64. //----------********获得初始的旋转********----------//
  65. eulerAngles = transform.localEulerAngles;
  66. }
  67. }

  上面代码中,值得注意的是LateUpdate(),原始的为Update(),因为模型默认会有动画在不停播放,

那么播放动画的Update()也会调用模型全身的骨骼,那么就会产生冲突,也就使腰部无法上下旋转。

所以将Update()改为LateUpdate(),后于动画播放的调用,即可。

  此时就可以将Main camera添加在模型腰部组件下

 

模型的左右旋转、观察上下的视野就完成了。

  

【Unity3D】Unity自带组件—完成第一人称人物控制的更多相关文章

  1. unity3d学习笔记(一) 第一人称视角实现和倒计时实现

    unity3d学习笔记(一) 第一人称视角实现和倒计时实现 1. 第一人称视角 (1)让mainCamera和player(视角对象)同步在一起 因为我们的player是生成的,所以不能把mainCa ...

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

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

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

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

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

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

  5. Unity自带网络功能——NetworkView组件、Serialize、RPC

    Unity拥有大量的第三方插件,专门提供了对网络功能的支持.可是,大部分开发人员第一次接触到的还是Unity自带的网络功能,也就是大家常常说到的Unity Networking API.这些API是借 ...

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

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

  7. 开发一个最简单的Cardboard虚拟现实应用(四)做一个Cardboard第一人称控制器

    [开源互助-原创文章,转载请说明出处]第三帖中已经创建了一个cardboard自带的demo应用,但它是不能移动的,玩家只能站在原地,通过头部转动来观察四周,除此之外,玩家并没有更多的手段与游戏场景进 ...

  8. unity自带寻路Navmesh入门教程(三)

    继续介绍NavMesh寻路的功能,接下来阿赵打算讲一下以下两个例子,先看看完成的效果:   第一个例子对于喜欢DOTA的朋友应该很熟悉了,就是不同小队分不同路线进攻的寻路,红绿蓝三个队伍分别根据三条路 ...

  9. 【转】unity自带寻路Navmesh入门教程(三)

    http://liweizhaolili.blog.163.com/blog/static/16230744201271225812998/ 继续介绍NavMesh寻路的功能,接下来阿赵打算讲一下以下 ...

随机推荐

  1. GhostDoc:生成.NET API文档的工具 (帮忙文档)

    在 Sandcastle:生成.NET API文档的工具 (帮忙文档) 后提供另一个生成API文档的工具.   1) 准备工作 安装GhostDoc Proc. 收费的哦.... 这个工具的优势是不像 ...

  2. .htaccess文件讲解

    .htaccess文件(或者"分布式配置文件")提供了针对目录改变配置的方法, 即,在一个特定的文档目录中放置一个包含一个或多个指令的文件, 以作用于此目录及其所有子目录.作为用户 ...

  3. JS内存管理测试

    打开调试器,切换到timer,点击左下角的record按钮开始,切换到memory视图,在文档中点击鼠标左右键,看股价走势图 function Allocate(kbs){ this.mem = ne ...

  4. POJ2996Help Me with the Game

    http://poj.org/problem?id=2996 又是一个大模拟题,表示做模拟题做的恶心,这个题主要是对数据的处理,从表格中将数据取出来再进行处理即可. 主要注意的点就是:1.KQRBN五 ...

  5. 2013 ACM-ICPC长沙赛区全国邀请赛—Special equations

    ……但是没仔细看,直接跳过了 这题直接枚举就可以过了 ;}

  6. hdu1874 畅通工程续

    http://acm.hdu.edu.cn/showproblem.php?pid=1874 //标准最短路模板 //需要注意的是两点间可能有多组 //需要取最短的 #include<iostr ...

  7. CSDN代码片排版

    CSDN上发博文,尤其是有代码的,要用好“插入代码”功能(见下图).这是必须的,未来的IT程序员,需要用这种方式,展示出自己的代码.这是尊重读者,树立品牌的需要. 相关方法,参考见视频<发布第一 ...

  8. iOS开发--多线程

    前面在<Bison眼中的iOS开发多线程是这样的(二)>一文中讲完了多线程的NSThread,不难发现这种方式的多线程实现起来非常的复杂,为了简化多线程的开发,iOS提供了GCD来实现多线 ...

  9. photoshop:多边形选项

    你会制作圆滑的五角星吗? 以五边形为例:

  10. 显示Servlet API主要版本,次要版本以及服务器系统信息

    package com.mhb; import java.io.IOException; import java.io.PrintWriter; import javax.servlet.Servle ...