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

这篇具有很好参考价值的文章主要介绍了【unity小技巧】两种办法解决FPS游戏枪或者人物穿墙穿模问题。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

前言

当我们开发FPS游戏时(其实3d游戏基本都会遇到这样的问题),如果我们不做处理,肯定会出现人物或者枪的穿墙穿模问题,这是是一个常见的挑战。
unity人物穿模,# unity小技巧,unity,游戏,游戏引擎,3d

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

第一种解决思路

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

关于深度 (Depth)我们看看官方文档的解释
unity人物穿模,# unity小技巧,unity,游戏,游戏引擎,3d
也就是深度 (Depth)值越大越优先渲染,默认摄像机设置为0

理论成立,我们来实践一下
我们把人物和枪都设置为player层,主相机不在渲染player层物体
unity人物穿模,# unity小技巧,unity,游戏,游戏引擎,3d
在主相机下在新建一个摄像机,用于单独渲染player层,配置如下,这样就可以了,简单吧?
unity人物穿模,# unity小技巧,unity,游戏,游戏引擎,3d
运行看看效果
unity人物穿模,# unity小技巧,unity,游戏,游戏引擎,3d

这种我愿称之为自欺欺人法,可以看到,枪实际其实是已经穿模了,但是我们的视角看到是没有的
unity人物穿模,# unity小技巧,unity,游戏,游戏引擎,3d

第二种方法

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

可以参考其他游戏的解决思路,大概就是人物碰壁旋转我们的武器
unity人物穿模,# unity小技巧,unity,游戏,游戏引擎,3d

新增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);
    }
}

在人物前面放个检测点,射线检测和配置如下
unity人物穿模,# unity小技巧,unity,游戏,游戏引擎,3d

unity人物穿模,# unity小技巧,unity,游戏,游戏引擎,3d
效果

unity人物穿模,# unity小技巧,unity,游戏,游戏引擎,3d
注意:如果你的射击是通过摄像机发射的方法实现的,碰壁点击射击肯定还有问题,子弹还是朝前开的,解决思路是你可以在碰壁时改变发射口的位置到枪口,这样子弹就变为从枪口射出了,或者直接暴力的碰壁禁止射击,具体就看你自己的需求了

URP项目武器穿模相机处理?(2024/1/11补充)

URP项目相机参数有所不同,这里继续补充一下,实现和方法一一样的效果

主相机取消武器层的渲染
unity人物穿模,# unity小技巧,unity,游戏,游戏引擎,3d
新建一个相机单独渲染武器
unity人物穿模,# unity小技巧,unity,游戏,游戏引擎,3d
unity人物穿模,# unity小技巧,unity,游戏,游戏引擎,3d

总结

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

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

感谢

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

完结

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

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

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

unity人物穿模,# unity小技巧,unity,游戏,游戏引擎,3d文章来源地址https://www.toymoban.com/news/detail-772759.html

到了这里,关于【unity小技巧】两种办法解决FPS游戏枪或者人物穿墙穿模问题的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Unity开发一个FPS游戏之二

    在之前的文章中,我介绍了如何开发一个FPS游戏,添加一个第一人称的主角,并设置武器。现在我将继续完善这个游戏,打算添加敌人,实现其智能寻找玩家并进行对抗。完成的效果如下: fps_enemy_demo   首先是设计敌人,我们可以在网上找到一些好的免费素材,例如在Unity商

    2024年03月17日
    浏览(37)
  • 【unity小技巧】实现没有动画的FPS武器摇摆和摆动效果

    添加程序摇摆和摆动是为任何FPS游戏添加一些细节的非常简单的方法。但是并不是所以的模型动画都会配有武器摆动动画效果,在本文中,将实现如何使用一些简单的代码实现武器摇摆和摆动效果,这比设置动画来尝试实现类似效果要容易得多 新增SwayNBobScript代码 代码挂载在

    2024年01月18日
    浏览(28)
  • Unity 实现一个FPS游戏的全过程

    Unity是一款功能强大的游戏引擎,它提供了各种各样的工具和功能,以帮助开发者轻松地创建精美的3D游戏和应用程序。在本文中,我们将使用Unity实现一个FPS游戏的全过程,从场景设计、角色控制、敌人AI到最终的打包发布。 对啦!这里有个游戏开发交流小组里面聚集了一帮

    2024年02月05日
    浏览(48)
  • 【Unity实战】实现一款简单的FPS游戏

    实现一款FPS游戏需要以下步骤: 1.创建场景:在Unity中创建3D场景,设定地形、灯光、天气等环境,新增角色、武器等道具。 2.角色控制:创建角色,并添加Unity内置的角色控制器或自定义控制器脚本,处理角色的移动、射击、跳跃、动作等。 3.武器系统:创建武器模型,添加

    2024年02月06日
    浏览(29)
  • Unity游戏源码分享-射击游戏Low Poly FPS Pack 3.2

    Unity游戏源码分享-射击游戏Low Poly FPS Pack 3.2 项目地址:https://download.csdn.net/download/Highning0007/88057717    

    2024年02月16日
    浏览(40)
  • 【unity小技巧】Unity人物衣服布料系统的探究 —— Cloth组件

    Cloth只能必须和Skinned Mesh Renderer搭配使用, 但是这不代表使用简单的物体时还必须在Max中导出一个带有蒙皮信息的FBX, 其实可以新建一个GameObject然后赋予Cloth组件, 这会自动添加Skinned Mesh Renderer组件, 然后在Skinned Mesh Renderer组件中赋予基本体的Mesh上去并且设置正确的材质也完全

    2024年03月27日
    浏览(30)
  • 【制作100个unity实战之2】实现一款简单的FPS游戏

    实现一款FPS游戏需要以下步骤: 1.创建场景:在Unity中创建3D场景,设定地形、灯光、天气等环境,新增角色、武器等道具。 2.角色控制:创建角色,并添加Unity内置的角色控制器或自定义控制器脚本,处理角色的移动、射击、跳跃、动作等。 3.武器系统:创建武器模型,添加

    2024年02月04日
    浏览(41)
  • 【Unity小技巧】3D人物移动脚步和跳跃下落音效控制

    获取人物移动状态 脚步声控制 解释: go 的这个逻辑保证了只有在需要重新设置音频剪辑时才会执行,避免了声音的混叠和中断。如果去除这个逻辑,可能会导致声音播放不正常。 AS.pitch是用来控制音频的音调(pitch)的属性。该属性控制音频的播放速度,1.0 表示正常速度,

    2024年01月22日
    浏览(31)
  • 用Unity做游戏打包前运行正常,打包后逻辑出现错误的解决办法

            作为一名Unity小白,我在前面学了C#和Unity的一些基本操作之后,就想着看看游戏打包出来以后是什么样子的,于是我就去网上找流程打包了,参考文章是这个:(10条消息) [转]unity作品打包_unity打包项目_小小姑娘很大的博客-CSDN博客         遇到标题中所描述问

    2024年02月05日
    浏览(35)
  • 【游戏开发实战】Unity手游第一人称视角,双摇杆控制,FPS射击游戏Demo(教程 | 含Demo工程源码)

    一、前言 嗨,大家好,我是新发。 有同学私信我,问我能不能写一篇Unity手游第一人称视角控制的教程, 那么,今天就来做个 Demo 吧~ 注: Demo 工程源码见文章末尾 最终效果如下: 二、实现方案 1、无主之地,第一人称视角 第一人称视角的游戏大家应该不陌生,比如《无主

    2023年04月08日
    浏览(33)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包