unity3d实现第一人称射击游戏之CS反恐精英(三)(人物旋转限制和跳跃功能(消除连跳,碰撞消除,高度稳定))
1旋转限制
上文实现的代码,我们的人物可以后空翻和前空翻,这不是我们想要的,所以我们需要对视角进行限定。
先分析一下,人物抬头不能让他超过某个角度,也就是抬头的时候我们人物的z轴和世界的y轴的夹角不能小于15度(我自己定义的),左右因为是沿着世界的y轴旋转所以不会有问题。下面看代码实现。
//自身坐标的z轴与世界的y轴要小于某个角度,负方向也是如此if (Vector3.Angle(this.transform.forward, Vector3.up)<=15&& MouseY>0 ) {MouseY = 0;}if (Vector3.Angle(this.transform.forward, -Vector3.up) <= 15 && MouseY < 0 ){MouseY = 0;}this.transform.Rotate(-MouseY * rotateSpeed * Time.deltaTime, 0, 0);
其中Mousey是鼠标上下移动的input,使用Vector3.Angle(自身z轴向量,世界y轴向量)得到两个向量的夹角,当夹角小于15度的时候,我们将它移动的input设置为0.反方向的话用-y和自身z轴的夹角去判断。
2人物跳跃()
人物跳跃物品们可以直接修改物体的position但是效果假,也可以加lerp去模拟弹跳曲线实现,但是有点麻烦,可以直接给物体添加一个向上的力,来模拟人物跳跃。下面看代码
private void JumpAndSquat() {//判断物体在y轴方向的移动速度IsJump = this.GetComponent<Rigidbody>().velocity.y == 0 ? false : true;//空格键跳跃if(Input.GetKey(KeyCode.Space)&&!IsJump){//添加作用力在世界y轴方向this.GetComponent<Rigidbody>().AddForce(Vector3.up*600);}}//不能在update中调用AddForce,所以写在FixedUpdate中private void FixedUpdate(){ //跳跃和下蹲JumpAndSquat();}
1):消除连跳
代码中第一行的 GetComponent<Rigidbody>().velocity.y是获取物体在y轴方向的速度,当人物的速度不为0的时侯(不在空中)才可以跳跃,PS:可能有bug,当人物升到顶点的时候速度为0,但是几率较小,我试了N多次没有试,所以出来暂时不做优化。
跳跃就使用
2):高度稳定
AddForce给人物添加一个世界y轴方向的作用力,注意这个作用力要大于你的重力*质量,大约3-4倍的样子,重力在Edit-project settings-Physics中设置,将跳跃的代码移动要放到FixedUpdate()中执行,因为unity引擎是满足物理定律的,我们应该知道冲量定理 F*t=Mv 力x时间=质量*速度,我们想要每次人物跳的高度一样,就需要保持施加的力和力的作用时间还有人物的质量要不变,在update中每一次调用的时间是不一样的,所以人物跳的高度也是不一样的。
3)去掉反作用力
既然unity是满足物理定律的,那我们做的人物可不是能够屈膝下蹲去消除弹力,所以我们需要去掉人物掉在地上的反作用力
看代码
//消除碰撞后的力private void OnCollisionStay(Collision collision){this.GetComponent<Rigidbody>().velocity = Vector3.zero;}
OnCollisionStay是人物和其他带有碰撞器的物体碰撞时调用,当人物碰撞的时候,我们将人物的速度设为0,注意速度是矢量,所以用vector3设置。
读到这里可能有小伙伴问了,你将速度设为0,那我人物不就移动不了了吗?并不是这样子的,我们人物移动是直接修改人物的postion去实现的,跟速度没有关系。所以velocity可以放心设置。
由于我做这个游戏也是一步一步的一个人做的,写的不好多多包涵,我写的代码有那里不好或者观看的朋友有疑问欢迎提问。
我们下章再见
unity3d实现第一人称射击游戏之CS反恐精英(三)(人物旋转限制和跳跃功能(消除连跳,碰撞消除,高度稳定))相关推荐
- unity3d实现第一人称射击游戏之CS反恐精英(二)(人物的移动和场景的碰撞关系)
上一节我们简单的实现了第一人称的移动,但是只是让枪有了漫游的效果,本章来实现它的物理效果. 1 先给枪添加一个碰撞器组件,为了简单我们添加一个box collider来模拟碰撞 调整下碰撞器大小,将它 ...
- unity3d实现第一人称射击游戏之CS反恐精英(一)(第一人称移动)
学习unity有一段时间了,自己准备做一个cs的项目来巩固并且提升自己. 第一步:搭建场景 因为这个游戏只针对游戏逻辑为重点,所以搭建场景和人物素材我都从unity asset store中的免费资源 ...
- unity3d实现第一人称射击游戏之CS反恐精英(四)(子弹模块,音效特效)
实现思想 由于子弹的速度非常快,直接让子弹像现实中那样移动很容易发生'穿模'现象,所以我们用unity中的射线来实现,当用户点击鼠标左键的时候,播放开枪动画,火花特效,开火音效,枪口发射一条射线,检测 ...
- unity3d实现第一人称射击游戏之CS反恐精英(六)(朝准星位置发射子弹,更换弹夹 )
上一节将UI简单的布置了一下,下面来实现UI中当前子弹数和总子弹数和脚本的数据绑定,并且发射子弹要朝着准星的位置发射 1:子弹和显示UI的子弹数的实现思路:在枪攻击的脚本里添加当前子弹数和背包子弹数两 ...
- unity3d实现第一人称射击游戏之CS反恐精英(五)(第一视角UI搭建,血量,金钱,子弹,准心,倒计时)
这一节内容比较简单,就是构建UI在摄像机屏幕上,让玩家可以看到人物的状态,血量,防弹衣,倒计时,金钱,子弹,准心 下面看一下效果图 最终效果是这样的,所有的布局全是用UGUI的TEXT组件添加的,需要 ...
- Unity3D FPS Game:第一人称射击游戏(一)
耗时一周制作的第一人称射击游戏,希望能帮助到大家! 由于代码较多,分为三篇展示,感兴趣的朋友们可以点击查看! Unity3D FPS Game:第一人称射击游戏(一) Unity3D FPS Game ...
- Unity3D FPS Game:第一人称射击游戏(二)
耗时一周制作的第一人称射击游戏,希望能帮助到大家! 由于代码较多,分为三篇展示,感兴趣的朋友们可以点击查看! Unity3D FPS Game:第一人称射击游戏(一) Unity3D FPS Game ...
- Unity3D FPS Game:第一人称射击游戏(三)
耗时一周制作的第一人称射击游戏,希望能帮助到大家! 由于代码较多,分为三篇展示,感兴趣的朋友们可以点击查看! Unity3D FPS Game:第一人称射击游戏(一) Unity3D FPS Game ...
- unity3D第一人称射击游戏(推荐)
unity3d第一人称射击游戏(推荐) 第一部分:简介 这个教程中,我们详细了解下如何制作一个简单的第一人称射击游戏(FPS).其中将介绍一些基本的3D游戏编程的概念和一些关于怎样如游戏程序员般思 ...
最新文章
- Error:This Gradle plugin requires Studio 3.0 minimum
- 客户端读写hdfs数据
- Spring MVC实现上传文件报错解决方案
- softmax函数理解
- c语言继承机制的作用,计算机二级C++强化试题及答案
- C#forUnity快速入门(连载5)-C#OOP编程之封装性
- HTML+CSS+JS实现 ❤️爱心文字3D旋转动画特效❤️
- PAT乙级(1028 人口普查)
- ISA Server 2006防火墙安装与管理指南(含企业版NLB与CARP的配置)
- 万以内的字符串整数变成汉子字符串
- 基于jQuery的视频和音频播放器jPlayer
- matlab中的bwdist(Distance Transform of a Binary Image)
- 用Python进行数学建模(一)
- ps抠图-基础篇(三)
- linux s5pc100串口驱动,FS_S5PC100平台linux摄像头驱动开发详解
- 当前时间的七天前和七天后
- python小作业8代码(列表的遍历与嵌套)
- Visual Studio 2019 Community 许可证过期解决方法
- 所有图表类型将在 v1.9.0 版本开始强制使用 ChartItem 进行数据项配置!
- relative会脱离文档流吗_脱离文档流和恢复文档流的方法
热门文章
- 2021年报表软件排名_报表工具推荐
- 计算机专业用一般处理器,看完这个,就知道自己的电脑”档次“了!
- Ruby的辛酸历程【一】
- Python调用API打造一个语音合成系统(百度智能云)
- Xen 虚拟机重命名
- vue-cli3.0 之 vue-lottie使用教程(渲染JSON动画)
- 打开excel文件的密码忘记了
- 【BEV】LSS,2D->3D,Lift-Splat-Shoot:通过隐式反投影到3D空间实现对任意相机图像编码
- 佳能相机照片误删怎么恢复,误删的数码相机照片怎么恢复
- 在 FEKO 的 CADFEKO 中创建弧线的方法