【Unity3D】Unity自带组件—完成第一人称人物控制
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()
- using UnityEngine;
- using System.Collections;
- /// MouseLook rotates the transform based on the mouse delta.
- /// Minimum and Maximum values can be used to constrain the possible rotation
- /// To make an FPS style character:
- /// - Create a capsule.
- /// - Add the MouseLook script to the capsule.
- /// -> Set the mouse look to use LookX. (You want to only turn character but not tilt it)
- /// - Add FPSInputController script to the capsule
- /// -> A CharacterMotor and a CharacterController component will be automatically added.
- /// - Create a camera. Make the camera a child of the capsule. Reset it's transform.
- /// - Add a MouseLook script to the camera.
- /// -> Set the mouse look to use LookY. (You want the camera to tilt up and down like a head. The character already turns.)
- [AddComponentMenu("Camera-Control/Mouse Look")]
- public class MouseLook : MonoBehaviour {
- public enum RotationAxes { MouseXAndY = , MouseX = , MouseY = }
- public RotationAxes axes = RotationAxes.MouseXAndY;
- public float sensitivityX = 15F;
- public float sensitivityY = 15F;
- public float minimumX = -360F;
- public float maximumX = 360F;
- public float minimumY = -60F;
- public float maximumY = 60F;
- private Vector3 eulerAngles;
- float rotationY = 0F;
- void LateUpdate ()
- {
- if (axes == RotationAxes.MouseXAndY)
- {
- float rotationX = transform.localEulerAngles.y + Input.GetAxis("Mouse X") * sensitivityX;
- rotationY += Input.GetAxis("Mouse Y") * sensitivityY;
- rotationY = Mathf.Clamp (rotationY, minimumY, maximumY);
- transform.localEulerAngles = new Vector3(-rotationY, rotationX, );
- }
- else if (axes == RotationAxes.MouseX)
- {
- transform.Rotate(, Input.GetAxis("Mouse X") * sensitivityX, );
- }
- else
- {
- rotationY += Input.GetAxis("Mouse Y") * sensitivityY;
- rotationY = Mathf.Clamp (rotationY, minimumY, maximumY);
- //----------********使Z轴旋转相应的鼠标偏移********----------//
- transform.localEulerAngles = new Vector3(eulerAngles.x,eulerAngles.y,eulerAngles.z + rotationY);
- }
- }
- void Start ()
- {
- // Make the rigid body not change rotation
- if (GetComponent<Rigidbody>())
- GetComponent<Rigidbody>().freezeRotation = true;
- //----------********获得初始的旋转********----------//
- eulerAngles = transform.localEulerAngles;
- }
- }
上面代码中,值得注意的是LateUpdate(),原始的为Update(),因为模型默认会有动画在不停播放,
那么播放动画的Update()也会调用模型全身的骨骼,那么就会产生冲突,也就使腰部无法上下旋转。
所以将Update()改为LateUpdate(),后于动画播放的调用,即可。
此时就可以将Main camera添加在模型腰部组件下
模型的左右旋转、观察上下的视野就完成了。
【Unity3D】Unity自带组件—完成第一人称人物控制的更多相关文章
- unity3d学习笔记(一) 第一人称视角实现和倒计时实现
unity3d学习笔记(一) 第一人称视角实现和倒计时实现 1. 第一人称视角 (1)让mainCamera和player(视角对象)同步在一起 因为我们的player是生成的,所以不能把mainCa ...
- 关于Unity中FPS第一人称射击类游戏制作(专题十)
当前Unity最新版本5.6.3f1,我使用的是5.5.1f1 场景搭建 1: 导入人物模型, 手持一把枪;2: 导入碎片模型;3: 创建一个平面;4: 创建一个障碍物;5: 导入人物模型;6: 配置 ...
- Unity——第一人称控制器的实现
Unity--第一人称控制器的实现 一.功能描述 在一个场景中实现人物的前后左右移动和跳跃功能:其中前后左右移动通过W.A.S.D方向键实现,跳跃功能通过空格键实现,并且考虑到重力作用,来调节跳跃功能 ...
- unity中制作模拟第一人称视角下的指南针
private int zRotation; public GameObject obj; public void Update() { //obj = GameObject.Find("C ...
- Unity自带网络功能——NetworkView组件、Serialize、RPC
Unity拥有大量的第三方插件,专门提供了对网络功能的支持.可是,大部分开发人员第一次接触到的还是Unity自带的网络功能,也就是大家常常说到的Unity Networking API.这些API是借 ...
- unity中自制模拟第一人称视角
public float sensitivityX = 5f; public float sensitivityY = 5f; public float sensitivetyKeyBoard = 0 ...
- 开发一个最简单的Cardboard虚拟现实应用(四)做一个Cardboard第一人称控制器
[开源互助-原创文章,转载请说明出处]第三帖中已经创建了一个cardboard自带的demo应用,但它是不能移动的,玩家只能站在原地,通过头部转动来观察四周,除此之外,玩家并没有更多的手段与游戏场景进 ...
- unity自带寻路Navmesh入门教程(三)
继续介绍NavMesh寻路的功能,接下来阿赵打算讲一下以下两个例子,先看看完成的效果: 第一个例子对于喜欢DOTA的朋友应该很熟悉了,就是不同小队分不同路线进攻的寻路,红绿蓝三个队伍分别根据三条路 ...
- 【转】unity自带寻路Navmesh入门教程(三)
http://liweizhaolili.blog.163.com/blog/static/16230744201271225812998/ 继续介绍NavMesh寻路的功能,接下来阿赵打算讲一下以下 ...
随机推荐
- GhostDoc:生成.NET API文档的工具 (帮忙文档)
在 Sandcastle:生成.NET API文档的工具 (帮忙文档) 后提供另一个生成API文档的工具. 1) 准备工作 安装GhostDoc Proc. 收费的哦.... 这个工具的优势是不像 ...
- .htaccess文件讲解
.htaccess文件(或者"分布式配置文件")提供了针对目录改变配置的方法, 即,在一个特定的文档目录中放置一个包含一个或多个指令的文件, 以作用于此目录及其所有子目录.作为用户 ...
- JS内存管理测试
打开调试器,切换到timer,点击左下角的record按钮开始,切换到memory视图,在文档中点击鼠标左右键,看股价走势图 function Allocate(kbs){ this.mem = ne ...
- POJ2996Help Me with the Game
http://poj.org/problem?id=2996 又是一个大模拟题,表示做模拟题做的恶心,这个题主要是对数据的处理,从表格中将数据取出来再进行处理即可. 主要注意的点就是:1.KQRBN五 ...
- 2013 ACM-ICPC长沙赛区全国邀请赛—Special equations
……但是没仔细看,直接跳过了 这题直接枚举就可以过了 ;}
- hdu1874 畅通工程续
http://acm.hdu.edu.cn/showproblem.php?pid=1874 //标准最短路模板 //需要注意的是两点间可能有多组 //需要取最短的 #include<iostr ...
- CSDN代码片排版
CSDN上发博文,尤其是有代码的,要用好“插入代码”功能(见下图).这是必须的,未来的IT程序员,需要用这种方式,展示出自己的代码.这是尊重读者,树立品牌的需要. 相关方法,参考见视频<发布第一 ...
- iOS开发--多线程
前面在<Bison眼中的iOS开发多线程是这样的(二)>一文中讲完了多线程的NSThread,不难发现这种方式的多线程实现起来非常的复杂,为了简化多线程的开发,iOS提供了GCD来实现多线 ...
- photoshop:多边形选项
你会制作圆滑的五角星吗? 以五边形为例:
- 显示Servlet API主要版本,次要版本以及服务器系统信息
package com.mhb; import java.io.IOException; import java.io.PrintWriter; import javax.servlet.Servle ...