【unity小技巧】两种办法解决FPS游戏枪或者人物穿墙穿模问题

文章目录

  • 前言
  • 第一种解决思路
  • 第二种方法
  • 总结
  • 感谢
  • 完结

前言

当我们开发FPS游戏时(其实3d游戏基本都会遇到这样的问题),如果我们不做处理,肯定会出现人物或者枪的穿墙穿模问题,这是是一个常见的挑战。
在这里插入图片描述

这种问题会破坏游戏的真实性和可玩性,使玩家的体验受到影响。在这篇文章中,我将分享一些Unity小技巧,介绍如何解决FPS游戏枪的穿墙穿模问题。无论你是初学者还是经验丰富的开发者,本文都将为你提供有用的技术参考和实践经验。

第一种解决思路

就是新增一个摄像机,并将每个摄像机分配给不同的__深度 (Depth),用来单独渲染我们的人物(包括枪)

关于深度 (Depth)我们看看官方文档的解释
在这里插入图片描述
也就是深度 (Depth)值越大越优先渲染,默认摄像机设置为0

理论成立,我们来实践一下
我们把人物和枪都设置为player层,主相机不在渲染player层物体
在这里插入图片描述
在主相机下在新建一个摄像机,用于单独渲染player层,配置如下,这样就可以了,简单吧?
在这里插入图片描述
运行看看效果
在这里插入图片描述

这种我愿称之为自欺欺人法,可以看到,枪实际其实是已经穿模了,但是我们的视角看到是没有的
在这里插入图片描述

第二种方法

这是参考youtube大佬的解决思路:https://www.youtube.com/watch?v=bax-xjlfMPs

可以参考其他游戏的解决思路,大概就是人物碰壁旋转我们的武器
在这里插入图片描述

新增ClipPrevention 脚本,挂载在要旋转的武器上,大概的逻辑就是在角色前做一个射线检测,如果碰到墙壁则旋转武器

public class ClipPrevention : MonoBehaviour
{
    public GameObject clipProjector;//检测点
    public LayerMask layerMask;//检测层级
    public float checkDistance;//检测距离
    public Vector3 newDirection;//武器碰壁旋转参数
    float lerpPos;
    RaycastHit hit;

    void Update()
    {
        // 发射射线,检测是否碰撞到物体
        if (Physics.Raycast(clipProjector.transform.position, clipProjector.transform.forward, out hit, checkDistance, layerMask))
        {
            // 计算当前距离与最大距离之间的百分比
            lerpPos = 1 - (hit.distance / checkDistance);
        }
        else
        {
            // 如果没有碰撞到任何物体,将百分比设为0
            lerpPos = 0;
        }

        // 限制百分比在0到1之间
        lerpPos = Mathf.Clamp01(lerpPos);

        // 使用插值方法改变物体的旋转角度
        transform.localRotation = Quaternion.Lerp(
            Quaternion.Euler(Vector3.zero),        // 指向正前方
            Quaternion.Euler(newDirection),        // 指向侧边
            lerpPos                                // 两者之间的百分比位置
        );
    }

    //在场景视图显示检测,方便调试
    private void OnDrawGizmos()
    {
        Debug.DrawRay(clipProjector.transform.position, clipProjector.transform.forward * checkDistance, Color.red);
    }
}

在人物前面放个检测点,射线检测和配置如下
在这里插入图片描述

在这里插入图片描述
效果

在这里插入图片描述
注意:如果你的射击是通过摄像机发射的方法实现的,碰壁点击射击肯定还有问题,子弹还是朝前开的,解决思路是你可以在碰壁时改变发射口的位置到枪口,这样子弹就变为从枪口射出了,或者直接暴力的碰壁禁止射击,具体就看你自己的需求了

总结

第一种方法最大的优点就是简单,但是如果你有第三人称视角或者联机游戏,可能他就并不适合,在别人眼里你还是穿模的,这时候就需要考虑使用第二种方法了。

这里我只研究了两种方法,如果你还有其他好办法,也欢迎分享出来。

感谢

【视频】https://www.youtube.com/watch?v=bax-xjlfMPs

完结

赠人玫瑰,手有余香!如果文章内容对你有所帮助,请不要吝啬你的点赞评论和关注,以便我第一时间收到反馈,你的每一次支持都是我不断创作的最大动力。当然如果你发现了文章中存在错误或者有更好的解决方法,也欢迎评论私信告诉我哦!

好了,我是向宇,https://xiangyu.blog.csdn.net

一位在小公司默默奋斗的开发者,出于兴趣爱好,最近开始自学unity,闲暇之余,边学习边记录分享,站在巨人的肩膀上,通过学习前辈们的经验总是会给我很多帮助和启发!php是工作,unity是生活!如果你遇到任何问题,也欢迎你评论私信找我, 虽然有些问题我也不一定会,但是我会查阅各方资料,争取给出最好的建议,希望可以帮助更多想学编程的人,共勉~

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mfbz.cn/a/251036.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

PhpStorm下载、安装、配置教程

前面的文章中,都是把.php文件放在WampServer的www目录下,通过浏览器访问运行。这篇文章就简单介绍一下PhpStorm这个php集成开发工具的使用。 目录 下载PhpStorm 安装PhpStorm 配置PhpStorm 修改个性化设置 修改字符编码 配置php的安装路径 使用Ph…

[wp]第四届江西省赣网杯网络安全大赛-web 部分wp

第四届江西省赣网杯网络安全大赛(gwb)线上预选赛 因为学业繁忙 只玩了1小时,后续看看补一下这些 2023gwb-web1 九宫格拼图 2023gwb-web2 $filexxx;extract($_GET);if(isset($fun)){$contenttrim(file_get_contents($file));if($fun!&…

uniapp的uni-im 即时通信使用教程【用户与商家对话、聊天 / 最新 / 最全 / 带源码 / 教程】

目录 使用场景用户图片商家图片 官方文档官方文档地址插件地址 项目创建uniCloud开发环境申请开发环境申请完后 概括开始使用步骤1App.vue 步骤2找到软件登录图片找到软件登录接口登录源码如下 步骤3找到软件注册图片注册源码如下 步骤4找到index.vue首页图片 index.vue源码如下…

微信小程序置顶导航,替代原生导航栏

效果图&#xff1a; 思路&#xff1a;Navigation是小程序的顶部导航组件&#xff0c;当页面配置navigationStyle设置为custom的时候可以使用此组件替代原生导航栏&#xff0c;wx.getSystemInfoSync获取可使用窗口高度 wxml代码&#xff1a; <!-- 头部 --> <view cla…

前后端交互—开发一个完整的服务器

代码下载 初始化 新建 apiServer 文件夹作为项目根目录&#xff0c;并在项目根目录中运行如下的命令&#xff0c;初始化包管理配置文件: npm init -y运行如下的命令&#xff0c;安装 express、cors: npm i express cors在项目根目录中新建 app.js 作为整个项目的入口文件&a…

时序预测 | Python实现LSTM电力需求预测

时序预测 | Python实现LSTM电力需求预测 目录 时序预测 | Python实现LSTM电力需求预测预测效果基本描述程序设计参考资料预测效果 基本描述 该数据集因其每小时的用电量数据以及 TSO 对消耗和定价的相应预测而值得注意,从而可以将预期预测与当前最先进的行业预测进行比较。使用…

uniGUI之上传文件UniFileUploadButton

TUniFileUploadButton主要属性&#xff1a; Filter: 文件类型过滤&#xff0c;有图片image/* audio/* video/*三种过滤 MaxAllowedSize: 设置文件最大上传尺寸&#xff1b; Message&#xff1a;标题以及消息文本&#xff0c;可翻译成中文 TUniFileUploadButton控件 支持多…

redis:四、双写一致性的原理和解决方案(延时双删、分布式锁、异步通知MQ/canal)、面试回答模板

双写一致性 场景导入 如果现在有个数据要更新&#xff0c;是先删除缓存&#xff0c;还是先操作数据库呢&#xff1f;当多个线程同时进行访问数据的操作&#xff0c;又是什么情况呢&#xff1f; 以先删除缓存&#xff0c;再操作数据库为例 多个线程运行的正常的流程应该如下…

Android动画(二)——补间动画

目录 介绍 Xml文件定义View动画 补充 alpha_animation.xml&#xff08;透明度&#xff09; rotate_animation.xml&#xff08;旋转&#xff09; scale_animation.xml&#xff08;伸缩&#xff09; translate_animation.xml &#xff08;平移&#xff09; group_animation.…

〖大前端 - 基础入门三大核心之JS篇(55)〗- 内置对象

说明&#xff1a;该文属于 大前端全栈架构白宝书专栏&#xff0c;目前阶段免费&#xff0c;如需要项目实战或者是体系化资源&#xff0c;文末名片加V&#xff01;作者&#xff1a;哈哥撩编程&#xff0c;十余年工作经验, 从事过全栈研发、产品经理等工作&#xff0c;目前在公司…

结构体基础全家桶(2)结构体指针

目录 指向结构体类型数据的指针&#xff1a; 指向结构体变量的指针&#xff1a; 创建&#xff1a; 应用&#xff1a; 注意事项&#xff1a; 指向结构体数组的指针 创建&#xff1a; 应用&#xff1a; 注意&#xff1a; 用结构体变量和指向结构体的指针做函数的参数 …

【Linux】文件系统、文件系统结构、虚拟文件系统

一、文件系统概述 1. 什么是文件系统&#xff1f;2. 文件系统&#xff08;文件管理系统的方法&#xff09;的种类有哪些&#xff1f;3. 什么是分区&#xff1f;4. 什么是文件系统目录结构&#xff1f;5. 什么虚拟文件系统Virtual File System &#xff1f;6. 虚拟文件系统有什…

selenium 与 chromedriver安装

本文章向大家介绍selenium 安装与 chromedriver安装&#xff0c;主要包括selenium 安装与 chromedriver安装使用实例、应用技巧、基本知识点总结和需要注意事项供大家参考。 一、安装selenium 1、Selenium简介 Selenium是一个Web的自动化测试工具,最初是为网站自动化测试而开…

IDEA配置一个新项目

git clone xxxxx 下载项目主分支 git checkout xxx 切换到需要开发的分支上 配置maven仓库 在File下的Settings中设置maven仓库 配置maven仓库的文件夹 配置好maven后&#xff0c;项目中会出现一个红色的pom.xml文件&#xff0c;右击文件&#xff0c;点击…&#xff0c;pom…

RabbitMq基本使用

目录 SpringAMQP1.准备Demo工程2.快速入门1.1.消息发送1.2.消息接收1.3.测试 3.WorkQueues模型3.1.消息发送3.2.消息接收3.3.测试3.4.能者多劳3.5.总结 SpringAMQP 将来我们开发业务功能的时候&#xff0c;肯定不会在控制台收发消息&#xff0c;而是应该基于编程的方式。由于R…

ArrayList与LinkLIst

ArrayList 在Java中&#xff0c;ArrayList是java.util包中的一个类&#xff0c;它实现了List接口&#xff0c;是一个动态数组&#xff0c;可以根据需要自动增长或缩小。下面是ArrayList的一些基本特性以及其底层原理的简要讲解&#xff1a; ArrayList基本特性&#xff1a; 动…

科大讯飞(深圳)测开面试真题

一面&#xff08;测试组长面&#xff09; 1、上家公司项目以及团队的规模是怎么样的&#xff1f; 2、你负责的项目整体的流程是怎么样的&#xff1f; 3、自动化实施过程中&#xff0c;是如何和业务测试进行沟通的&#xff1f; 4、在上家公司你已经是专职做自动化了&#xf…

会声会影怎么使用? 会声会影2024快速掌握入门技巧

一听说视频剪辑我们就不由得联想到电影、电视等一些高端的视频剪辑技术&#xff0c;大家都觉得视频剪辑是一个非常复杂而且需要很昂贵的设备才可以完成的技术活&#xff0c;这对很多“门外汉”来说都可望而不可及。实际上&#xff0c;使用会声会影剪辑视频不仅是很多人都可以操…

《面向机器学习的数据标注规程》摘录

说明&#xff1a;本文使用的标准是2019年的团体标准&#xff0c;最新的国家标准已在2023年发布。 3 术语和定义 3.2 标签 label 标识数据的特征、类别和属性等。 3.4 数据标注员 data labeler 对待标注数据进行整理、纠错、标记和批注等操作的工作人员。 【批注】按照定义…

【话题】低代码123

目录 一、什么是低代码 二、低代码的优缺点 三、你认为低代码会替代传统编程吗&#xff1f; 四、有哪些低代码工具和框架 4.1 国外的平台 4.2 国内的平台 五、未来的软件研发 低代码&#xff0c;听着就过瘾的一个词。而且不是无代码&#xff0c;这说明&#xff0c;低代码…
最新文章