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反恐精英(三)(人物旋转限制和跳跃功能(消除连跳,碰撞消除,高度稳定))相关推荐

  1. unity3d实现第一人称射击游戏之CS反恐精英(二)(人物的移动和场景的碰撞关系)

    上一节我们简单的实现了第一人称的移动,但是只是让枪有了漫游的效果,本章来实现它的物理效果. 1 先给枪添加一个碰撞器组件,为了简单我们添加一个box collider来模拟碰撞 调整下碰撞器大小,将它 ...

  2. unity3d实现第一人称射击游戏之CS反恐精英(一)(第一人称移动)

    学习unity有一段时间了,自己准备做一个cs的项目来巩固并且提升自己. 第一步:搭建场景 因为这个游戏只针对游戏逻辑为重点,所以搭建场景和人物素材我都从unity asset store中的免费资源 ...

  3. unity3d实现第一人称射击游戏之CS反恐精英(四)(子弹模块,音效特效)

    实现思想 由于子弹的速度非常快,直接让子弹像现实中那样移动很容易发生'穿模'现象,所以我们用unity中的射线来实现,当用户点击鼠标左键的时候,播放开枪动画,火花特效,开火音效,枪口发射一条射线,检测 ...

  4. unity3d实现第一人称射击游戏之CS反恐精英(六)(朝准星位置发射子弹,更换弹夹 )

    上一节将UI简单的布置了一下,下面来实现UI中当前子弹数和总子弹数和脚本的数据绑定,并且发射子弹要朝着准星的位置发射 1:子弹和显示UI的子弹数的实现思路:在枪攻击的脚本里添加当前子弹数和背包子弹数两 ...

  5. unity3d实现第一人称射击游戏之CS反恐精英(五)(第一视角UI搭建,血量,金钱,子弹,准心,倒计时)

    这一节内容比较简单,就是构建UI在摄像机屏幕上,让玩家可以看到人物的状态,血量,防弹衣,倒计时,金钱,子弹,准心 下面看一下效果图 最终效果是这样的,所有的布局全是用UGUI的TEXT组件添加的,需要 ...

  6. Unity3D FPS Game:第一人称射击游戏(一)

    耗时一周制作的第一人称射击游戏,希望能帮助到大家! 由于代码较多,分为三篇展示,感兴趣的朋友们可以点击查看! Unity3D FPS Game:第一人称射击游戏(一) Unity3D FPS Game ...

  7. Unity3D FPS Game:第一人称射击游戏(二)

    耗时一周制作的第一人称射击游戏,希望能帮助到大家! 由于代码较多,分为三篇展示,感兴趣的朋友们可以点击查看! Unity3D FPS Game:第一人称射击游戏(一) Unity3D FPS Game ...

  8. Unity3D FPS Game:第一人称射击游戏(三)

    耗时一周制作的第一人称射击游戏,希望能帮助到大家! 由于代码较多,分为三篇展示,感兴趣的朋友们可以点击查看! Unity3D FPS Game:第一人称射击游戏(一) Unity3D FPS Game ...

  9. unity3D第一人称射击游戏(推荐)

    unity3d第一人称射击游戏(推荐) 第一部分:简介   这个教程中,我们详细了解下如何制作一个简单的第一人称射击游戏(FPS).其中将介绍一些基本的3D游戏编程的概念和一些关于怎样如游戏程序员般思 ...

最新文章

  1. Error:This Gradle plugin requires Studio 3.0 minimum
  2. 客户端读写hdfs数据
  3. Spring MVC实现上传文件报错解决方案
  4. softmax函数理解
  5. c语言继承机制的作用,计算机二级C++强化试题及答案
  6. C#forUnity快速入门(连载5)-C#OOP编程之封装性
  7. HTML+CSS+JS实现 ❤️爱心文字3D旋转动画特效❤️
  8. PAT乙级(1028 人口普查)
  9. ISA Server 2006防火墙安装与管理指南(含企业版NLB与CARP的配置)
  10. 万以内的字符串整数变成汉子字符串
  11. 基于jQuery的视频和音频播放器jPlayer
  12. matlab中的bwdist(Distance Transform of a Binary Image)
  13. 用Python进行数学建模(一)
  14. ps抠图-基础篇(三)
  15. linux s5pc100串口驱动,FS_S5PC100平台linux摄像头驱动开发详解
  16. 当前时间的七天前和七天后
  17. python小作业8代码(列表的遍历与嵌套)
  18. Visual Studio 2019 Community 许可证过期解决方法
  19. 所有图表类型将在 v1.9.0 版本开始强制使用 ChartItem 进行数据项配置!
  20. relative会脱离文档流吗_脱离文档流和恢复文档流的方法

热门文章

  1. 2021年报表软件排名_报表工具推荐
  2. 计算机专业用一般处理器,看完这个,就知道自己的电脑”档次“了!
  3. Ruby的辛酸历程【一】
  4. Python调用API打造一个语音合成系统(百度智能云)
  5. Xen 虚拟机重命名
  6. vue-cli3.0 之 vue-lottie使用教程(渲染JSON动画)
  7. 打开excel文件的密码忘记了
  8. 【BEV】LSS,2D->3D,Lift-Splat-Shoot:通过隐式反投影到3D空间实现对任意相机图像编码
  9. 佳能相机照片误删怎么恢复,误删的数码相机照片怎么恢复
  10. 在 FEKO 的 CADFEKO 中创建弧线的方法