当前位置: 首页 > news >正文

福田区住房和建设局网站企业网站运营推广难做吗

福田区住房和建设局网站,企业网站运营推广难做吗,什么语言做网站好,企业网站排名优化参考原视频链接 #xff1a;https://www.bilibili.com/video/BV1j44y1S7fX/ 注意#xff1a;本文为学习笔记记录#xff0c;推荐支持原作者#xff0c;去看原视频自己手敲代码理解更加深入 免责声明#xff1a;向宇的博客免责声明 文章目录 前言不加后座力效果简单添加后座… 参考原视频链接 https://www.bilibili.com/video/BV1j44y1S7fX/ 注意本文为学习笔记记录推荐支持原作者去看原视频自己手敲代码理解更加深入 免责声明向宇的博客免责声明 文章目录 前言不加后座力效果简单添加后座力限制后座力子弹落点控制1. 如果我们想要一个七字型的弹道那就先让前四发子弹往右后面有十发子弹往左最后的区间就五五开2. 如果要T形的话可以直接修改配置即可 镜像弹道添加散射完整代码感谢完结 前言 在第一人称射击FPS游戏中控制枪械的后坐力是为了增加游戏的真实性和挑战性。开枪后的后坐力通常会导致玩家的视角和枪口偏移影响接下来的射击精准度。以下是一些常见的方法来模拟和控制后坐力 视角偏移 当玩家开枪时可以通过编程让玩家的视角向上或者侧向偏移模拟因后坐力导致的枪口跳动。这种偏移通常是瞬间的并且随后会有一个恢复过程视角逐渐回到原位。 实现步骤 监听射击事件。在射击时立即调整玩家的摄像机旋转角度向上偏移一定的角度模拟垂直后坐力。根据需要也可以添加水平方向的随机偏移模拟水平后坐力。通过插值函数如Lerp或Slerp逐渐将摄像机旋转角度恢复到射击前的状态。 枪械动画 可以为枪械创建后坐力动画在射击时播放这个动画。动画可以在3D建模软件中预先制作好也可以通过程序动态生成。 实现步骤 设计并制作后坐力动画。射击时触发动画的播放。动画结束后可以让枪械逐渐回到初始位置或者在多次连续射击中保持一定的偏移量。 枪械物理模拟 使用物理引擎来模拟枪械的后坐力效果。这种方法可以使得后坐力更加自然和可预测。 实现步骤 在枪械模型上附加一个物理组件如刚体。射击时对枪械施加一个向后的力或冲量。利用物理引擎来处理这个力的效果使得枪械产生后退和上抬的动作。 结合这些方法开发者可以创造出符合游戏设计需求的后坐力效果使得射击体验既具有挑战性又富有乐趣。在实际应用中通常会根据不同武器的特性来调整后坐力的大小和表现方式以便玩家可以通过技能和习惯来掌握每种武器的射击特点。 本文主要是探究第一种办法因为枪械的射击通常我们会选择射线投射的方式实现要实现后座力效果和第一种最匹配。 不加后座力效果 射击的具体实现可以看我之前的文章一个通用的FPS枪支不同武器射击控制脚本 简单添加后座力 我们先做摄像机给摄像机添加一个父类实现后座力的原理就是控制摄像机这个父类的xy旋转偏移值 public class GunRecoil : MonoBehaviour {private Vector2 recoil; // 后坐力向量存储X和Y方向上的偏移量public float addSpeed 0.1f;// 后坐力增加速度public float subSpeed 10f;// 后坐力减少速度void Update(){recoil.x Mathf.MoveTowards(recoil.x, 0, subSpeed * Time.deltaTime);recoil.y Mathf.MoveTowards(recoil.y, 0, subSpeed * Time.deltaTime);// 将recoil.y应用到物体的X轴旋转角度将recoil.x应用到物体的Y轴旋转角度transform.localEulerAngles new Vector3(-recoil.y, recoil.x, 0);//测试if (Input.GetKey(KeyCode.Mouse0)){AddRecoil();}}// 添加后坐力public void AddRecoil(){recoil.x Random.Range(-1, 1) * addSpeed;recoil.y addSpeed;} }效果 限制后座力 我们想要更加精准可以修改addSpeed和subSpeed为Vector2值的当然我们不希望后座力导致视角一直往上抬需要限制一个值 private Vector2 recoil; // 后坐力向量存储X和Y方向上的偏移量public Vector2 addSpeed new Vector2(0.5f, 0.75f); // 后坐力增加速度 public Vector2 subSpeed new Vector2(3f, 5f); // 后坐力减少速度 public Vector2 maxRecoil new Vector2(1, 5); // 后坐力的最大值void Update() {// 使用Mathf.MoveTowards方法逐渐将recoil.x和recoil.y减少到0// subSpeed.x和subSpeed.y分别表示在每秒内减少的量乘以Time.deltaTime可以使速度与帧率无关recoil.x Mathf.MoveTowards(recoil.x, 0, subSpeed.x * Time.deltaTime);recoil.y Mathf.MoveTowards(recoil.y, 0, subSpeed.y * Time.deltaTime);// 将recoil.y应用到物体的X轴旋转角度将recoil.x应用到物体的Y轴旋转角度transform.localEulerAngles new Vector3(-recoil.y, recoil.x, 0);//测试if (Input.GetKey(KeyCode.Mouse0)){AddRecoil();} }// 添加后坐力 public void AddRecoil() {// // 通过随机取值范围[-1, 1]来增加recoil.x的值并限制在-maxRecoil.x和maxRecoil.x之间recoil.x Mathf.Clamp(recoil.x Random.Range(-1, 1) * addSpeed.x, -maxRecoil.x, maxRecoil.x);// // 增加recoil.y的值并限制在0和maxRecoil.y之间recoil.y Mathf.Clamp(recoil.y addSpeed.y, 0, maxRecoil.y); }效果 子弹落点控制 修改GunRecoil public static GunRecoil Instance; private void Awake() {Instance this; }public void AddRecoil(int xDir) {// // 通过随机取值范围[-1, 1]来增加recoil.x的值并限制在-maxRecoil.x和maxRecoil.x之间recoil.x Mathf.Clamp(recoil.x xDir * addSpeed.x, -maxRecoil.x, maxRecoil.x);// // 增加recoil.y的值并限制在0和maxRecoil.y之间,纵向后座力一般只有往上的recoil.y Mathf.Clamp(recoil.y addSpeed.y, 0, maxRecoil.y); }//。。。[System.Serializable] public struct AmmoPosData { public Data[] datas; // 子弹数量对应的数据// 根据子弹数量获取子弹偏移方向public int GetDir(int ammoCount){int maxId datas.Length - 1;int nextId 0;Data dt;// 在数据列表中查找匹配的数据do{dt datas[nextId];nextId;} while (nextId maxId ammoCount dt.ammo);// 根据随机数确定偏移方向float random Random.Range(0, 1f);if (random dt.left){return -1; // 左偏移}else if (random dt.left dt.right){return 1; // 右偏移}return 0; // 不偏移}[System.Serializable]public struct Data{public int ammo; // 子弹数量public float left; // 左偏移概率public float right; // 右偏移概率} }修改GunSystem调用及发射子弹脚本 private int shootAmmo;//射击第几颗子弹 public AmmoPosData ammoData;private void Update(){// 射击if (readyToShoot shooting !reloading bulletsLeft 0){bulletsShot bulletsPerTap;Shoot();//射击脚本}if (!shooting) shootAmmo 0; }private void Shoot() {shootAmmo;GunRecoil.Instance.AddRecoil(ammoData.GetDir(shootAmmo));//。。。 }1. 如果我们想要一个七字型的弹道那就先让前四发子弹往右后面有十发子弹往左最后的区间就五五开 效果 2. 如果要T形的话可以直接修改配置即可 效果 镜像弹道 修改GunRecoil //。。。[System.Serializable] public struct AmmoPosData {public float mirrorRate;//镜像概率public Data[] datas; // 子弹数量对应的数据// 根据子弹数量获取子弹偏移方向,和是否镜像public int GetDir(int ammoCount, bool mirror){int maxId datas.Length - 1;int nextId 0;Data dt;// 在数据列表中查找匹配的数据do{dt datas[nextId];nextId;} while (nextId maxId ammoCount dt.ammo);// 根据随机数确定偏移方向float random Random.Range(0, 1f);if (random dt.left){return mirror ? 1 : -1; // 左偏移}else if (random dt.left dt.right){return mirror ? -1 : 1; // 右偏移}return 0; // 不偏移}//按概率判断是否镜像public bool GetMirror(){if(Random.Range(0, 1f) mirrorRate)return true;return false;}[System.Serializable]public struct Data{public int ammo; // 子弹数量public float left; // 左偏移概率public float right; // 右偏移概率} }修改GunSystem调用及发射子弹脚本 bool isMirror;private void Update(){// 射击if (readyToShoot shooting !reloading bulletsLeft 0){bulletsShot bulletsPerTap;Shoot();//射击脚本}if (!shooting) shootAmmo 0; }private void Shoot() {shootAmmo;//一般在第一发子弹决定弹道的镜像if(shootAmmo 1)isMirror ammoData.GetMirror();GunRecoil.Instance.AddRecoil(ammoData.GetDir(shootAmmo, isMirror));//。。。 }配置镜像概率为0.5 测试可以看到弹道有一半的概率变成镜像 添加散射 现在的弹道太规律了子弹是指哪里就打哪里然而实际游戏中子弹可能会根据落点区间的大小基于瞄准射线进行一定的偏移准星的大小就侧面体现了落点区间的大小 其实就是定义射击时的散布度 [Tooltip(射击时的散布度)] public float spread;private void Shoot() {shootAmmo;//一般在第一发子弹决定弹道的镜像if(shootAmmo 1)isMirror ammoData.GetMirror();GunRecoil.Instance.AddRecoil(ammoData.GetDir(shootAmmo, isMirror));// 散布float x Random.Range(-spread, spread);float y Random.Range(-spread, spread);// 计算带有散布的射击方向Vector3 direction fpsCam.transform.forward new Vector3(x, y, 0);// 射线检测if (Physics.Raycast(fpsCam.transform.position, direction, out RaycastHit rayHit, range)){if (rayHit.collider.CompareTag(Wall)){Debug.Log(击中墙壁);// 击中敌人特效var res Instantiate(hitSpecialEffectsWall, rayHit.point, Quaternion.Euler(0, 90, 0));res.transform.parent rayHit.transform;//设置父类}} }完整代码 //后座力 public class GunRecoil : MonoBehaviour {public static GunRecoil Instance;private void Awake(){Instance this;}private Vector2 recoil; // 后坐力向量存储X和Y方向上的偏移量public Vector2 addSpeed new Vector2(0.5f, 0.75f); // 后坐力增加速度public Vector2 subSpeed new Vector2(3f, 5f); // 后坐力减少速度public Vector2 maxRecoil new Vector2(1, 5); // 后坐力的最大值void Update(){// 使用Mathf.MoveTowards方法逐渐将recoil.x和recoil.y减少到0// subSpeed.x和subSpeed.y分别表示在每秒内减少的量乘以Time.deltaTime可以使速度与帧率无关recoil.x Mathf.MoveTowards(recoil.x, 0, subSpeed.x * Time.deltaTime);recoil.y Mathf.MoveTowards(recoil.y, 0, subSpeed.y * Time.deltaTime);// 将recoil.y应用到物体的X轴旋转角度将recoil.x应用到物体的Y轴旋转角度transform.localEulerAngles new Vector3(-recoil.y, recoil.x, 0);}// 添加后坐力public void AddRecoil(int xDir){// // 通过随机取值范围[-1, 1]来增加recoil.x的值并限制在-maxRecoil.x和maxRecoil.x之间recoil.x Mathf.Clamp(recoil.x xDir * addSpeed.x, -maxRecoil.x, maxRecoil.x);// // 增加recoil.y的值并限制在0和maxRecoil.y之间,纵向后座力一般只有往上的recoil.y Mathf.Clamp(recoil.y addSpeed.y, 0, maxRecoil.y);} }[System.Serializable] public struct AmmoPosData {public float mirrorRate;//镜像概率public Data[] datas; // 子弹数量对应的数据// 根据子弹数量获取子弹偏移方向,和是否镜像public int GetDir(int ammoCount, bool mirror){int maxId datas.Length - 1;int nextId 0;Data dt;// 在数据列表中查找匹配的数据do{dt datas[nextId];nextId;} while (nextId maxId ammoCount dt.ammo);// 根据随机数确定偏移方向float random Random.Range(0, 1f);if (random dt.left){return mirror ? 1 : -1; // 左偏移}else if (random dt.left dt.right){return mirror ? -1 : 1; // 右偏移}return 0; // 不偏移}//按概率判断是否镜像public bool GetMirror(){if(Random.Range(0, 1f) mirrorRate)return true;return false;}[System.Serializable]public struct Data{public int ammo; // 子弹数量public float left; // 左偏移概率public float right; // 右偏移概率} }感谢 【视频】https://www.bilibili.com/video/BV1j44y1S7fX/ 完结 赠人玫瑰手有余香如果文章内容对你有所帮助请不要吝啬你的点赞评论和关注以便我第一时间收到反馈你的每一次支持都是我不断创作的最大动力。当然如果你发现了文章中存在错误或者有更好的解决方法也欢迎评论私信告诉我哦 好了我是向宇https://xiangyu.blog.csdn.net 一位在小公司默默奋斗的开发者出于兴趣爱好于是最近才开始自习unity。如果你遇到任何问题也欢迎你评论私信找我 虽然有些问题我可能也不一定会但是我会查阅各方资料争取给出最好的建议希望可以帮助更多想学编程的人共勉~
http://wiki.neutronadmin.com/news/35554/

相关文章:

  • asp.net网站开发流程深圳网站设计 建设首选深圳市
  • 30天网站建设实录视频云盘电子版简历word格式
  • 如何查做的网站排名c语言做网站账号登录系统
  • 万网虚拟机怎么做两个网站怎么做个人网站建设
  • 微信小程序 网站建设高校网站建设 调查
  • 天津关键词优化服务济南网站怎么做seo
  • 黄页网站推广下载免费徐州商城建站系统
  • 成都市温江建设局网站建设部网站燃气管理部门
  • 做卖蜂蜜的网站计划书网站怎么做的有创意
  • 帮助做职业规划的网站免费推广引流平台app
  • 想开个影视网站 那有做的淄博亿泰信息技术有限公司
  • vps服务器怎么创建多个网站wordpress海外建站
  • 门户网站开发建设技术大型网站建设机构
  • 网站目录wordpress 自动内链 代码
  • 网站建设设计维片wordpress设置文件
  • 设计微信网站建设wiki wordpress
  • 江苏环泰建设有限公司网站建设治安总队网站目的
  • 宁波优化网站排名公司推荐如何看网站关键词
  • 网站怎么做抽奖企业网站ppt怎么做
  • 广元 网站建设深圳企业vi设计公司
  • 湖南郴州建设局网站黑龙江建设网官方网站特种作业
  • 微信小程序制作平台官网江苏seo和网络推广
  • 网站建设ppt方案模板下载石家庄网站制作找谁
  • 顺德建网站的公司asp网站数据库扫描
  • 网站不备案可以做淘宝联盟吗侧边导航条wordpress
  • 公司网站建设费怎么做账上海网站建设网络推广
  • 帝国行业网站模板中国免费网站服务器
  • 个性flash网站做网站需要哪些资质
  • 什么网站是最全的免费网络电视直播软件
  • 闸北微信网站建设古镇 网站建设