【unity小技巧】实现没有动画的FPS武器摇摆和摆动效果

这篇具有很好参考价值的文章主要介绍了【unity小技巧】实现没有动画的FPS武器摇摆和摆动效果。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

前言

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

开始

新增SwayNBobScript代码

using UnityEngine;

// 武器摆动脚本
public class SwayNBobScript : MonoBehaviour
{
    [Header("Sway")]
    public float step = 0.01f;  // 摆动步长
    public float maxStepDistance = 0.06f;  // 最大步长距离
    Vector3 swayPos;  // 摆动位置

    [Header("Sway Rotation")]
    public float rotationStep = 4f;  // 摆动旋转步长
    public float maxRotationStep = 5f;  // 最大旋转步长
    Vector3 swayEulerRot;  // 摆动旋转角度

    public float smooth = 10f;  // 平滑移动速度
    float smoothRot = 12f;  // 平滑旋转速度

    [Header("Bobbing")]
    public float speedCurve;  // 速度曲线参数
    float curveSin { get => Mathf.Sin(speedCurve); }  // 曲线正弦值
    float curveCos { get => Mathf.Cos(speedCurve); }  // 曲线余弦值

    public Vector3 travelLimit = Vector3.one * 0.025f;  // 移动限制
    public Vector3 bobLimit = Vector3.one * 0.01f;  // 摆动限制
    Vector3 bobPosition;  // 摆动位置偏移量

    public float bobExaggeration;  // 摆动夸张系数

    [Header("Bob Rotation")]
    public Vector3 multiplier;  // 摆动旋转系数
    Vector3 bobEulerRotation;  // 摆动旋转角度

    void Update()
    {
        GetInput();

        Sway();
        SwayRotation();
        BobOffset();
        BobRotation();

        CompositePositionRotation();
    }


    Vector2 walkInput;  // 行走输入
    Vector2 lookInput;  // 视角输入

    // 获取输入
    void GetInput()
    {
        walkInput.x = Input.GetAxis("Horizontal");
        walkInput.y = Input.GetAxis("Vertical");
        walkInput = walkInput.normalized;

        lookInput.x = Input.GetAxis("Mouse X");
        lookInput.y = Input.GetAxis("Mouse Y");
    }


    // 摆动
    void Sway()
    {
        Vector3 invertLook = lookInput * -step;
        invertLook.x = Mathf.Clamp(invertLook.x, -maxStepDistance, maxStepDistance);
        invertLook.y = Mathf.Clamp(invertLook.y, -maxStepDistance, maxStepDistance);
        swayPos = invertLook;
    }

    // 摆动旋转
    void SwayRotation()
    {
        Vector2 invertLook = lookInput * -rotationStep;
        invertLook.x = Mathf.Clamp(invertLook.x, -maxRotationStep, maxRotationStep);
        invertLook.y = Mathf.Clamp(invertLook.y, -maxRotationStep, maxRotationStep);
        swayEulerRot = new Vector3(invertLook.y, invertLook.x, invertLook.x);
    }

    // 合成位置和旋转部分
    void CompositePositionRotation()
    {
        transform.localPosition = Vector3.Lerp(transform.localPosition, swayPos + bobPosition, Time.deltaTime * smooth);
        transform.localRotation = Quaternion.Slerp(transform.localRotation, Quaternion.Euler(swayEulerRot) * Quaternion.Euler(bobEulerRotation), Time.deltaTime * smoothRot);
    }

    // 摆动偏移
    void BobOffset()
    {
        speedCurve += Time.deltaTime * (MovementScript.Instance.isGround ? (Input.GetAxis("Horizontal") + Input.GetAxis("Vertical")) * bobExaggeration : 1f) + 0.01f;

        bobPosition.x = (curveCos * bobLimit.x * (MovementScript.Instance.isGround ? 1 : 0)) - (walkInput.x * travelLimit.x);
        bobPosition.y = (curveSin * bobLimit.y) - (Input.GetAxis("Vertical") * travelLimit.y);
        bobPosition.z = -(walkInput.y * travelLimit.z);
    }

    // 摆动旋转
    void BobRotation()
    {
        bobEulerRotation.x = (walkInput != Vector2.zero ? multiplier.x * (Mathf.Sin(2 * speedCurve)) : multiplier.x * (Mathf.Sin(2 * speedCurve) / 2));
        bobEulerRotation.y = (walkInput != Vector2.zero ? multiplier.y * curveCos : 0);
        bobEulerRotation.z = (walkInput != Vector2.zero ? multiplier.z * curveCos * walkInput.x : 0);
    }
}

代码挂载在武器父类上即可
【unity小技巧】实现没有动画的FPS武器摇摆和摆动效果,# unity小技巧,unity,游戏引擎
正常情况下,我们还要实现武器在瞄准时,减低或者禁用武器摆动效果,可以选择在瞄准时启动和禁用SwayNBobScript脚本

public SwayNBobScript swayNBobScript;

private void Update()
{
	DetermineAim();
}

//瞄准
void DetermineAim(){
	swayNBobScript.enabled = true;
	if (Input.GetMouseButton(1)){
	    swayNBobScript.enabled = false;
	} 
}

效果
【unity小技巧】实现没有动画的FPS武器摇摆和摆动效果,# unity小技巧,unity,游戏引擎

完结

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

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

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

【unity小技巧】实现没有动画的FPS武器摇摆和摆动效果,# unity小技巧,unity,游戏引擎文章来源地址https://www.toymoban.com/news/detail-801680.html

到了这里,关于【unity小技巧】实现没有动画的FPS武器摇摆和摆动效果的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

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

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

相关文章

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

    当我们开发FPS游戏时(其实3d游戏基本都会遇到这样的问题),如果我们不做处理,肯定会出现人物或者枪的穿墙穿模问题,这是是一个常见的挑战。 这种问题会破坏游戏的真实性和可玩性,使玩家的体验受到影响。在这篇文章中,我将分享一些Unity小技巧,介绍如何解决F

    2024年02月03日
    浏览(69)
  • 【UE4/蓝图/C++】简易FPS武器视角随动效果

    【UE4/蓝图/C++】简易FPS武器视角随动效果 主要是实现了一个简单的第一人称的手臂跟随相机反方向移动(也可改成同方向),用蓝图和C++分别实现了同样功能 一共需要一个继承自Character的类,类内有一个Camera组件,和一个挂载在Camera组件下的手臂网格体组件,称为Arm Mesh 一共

    2024年03月12日
    浏览(63)
  • Unity为什么单击动画文件后,没有动画的预览窗口?

    单击一个动画文件之后,没有出现动画的预览窗口(如图0.1)。 动画预览窗口只是被隐藏了,向上拖拉右下角的双横线,即可打开动画预览窗口。(如图0.2) 如图0.3,动画预览窗口显现了。

    2024年02月12日
    浏览(53)
  • Unity 实现一个FPS游戏的全过程

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

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

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

    2024年02月06日
    浏览(41)
  • Unity制作随风摇摆的植物

    今天记录一下如何实现随风摇摆的植物,之前项目里面的植物摇摆实现是使用骨骼动画实现的,这种方式太消耗性能,植物这种东西没必要,直接使用顶点动画即可。 植物不需要使用标准的PBR流程,基础的颜色贴图加上法向贴图即可,它不区分金属非金属,精致一些可以加一

    2024年04月08日
    浏览(38)
  • 【Unity造轮子】实现一个类csgo的武器轮盘功能

    参考原视频链接 【视频】:https://www.youtube.com/watch?v=pmqs5zsKTTs 注意 :本文为学习笔记记录,推荐支持原作者,去看原视频自己手敲代码理解更加深入

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

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

    2024年02月04日
    浏览(62)
  • 100%硬核解决前端复杂动画的秘密武器!

    哈喽!大家好!我是程序视点的小二哥。 前端开发中,总会遇到这样一个困境: 动画还原 。对于前端开发工程师,有的是这样做的。 照着设计动画模仿,猜测动画时长,手创建贝塞尔曲线…… 调整细节耗时耗力,效果还差强人意... 好不容易实现了,还原度却达不到要求

    2024年02月04日
    浏览(52)
  • 【Unity3D小技巧】Unity3D中Animation和Animator动画的播放、暂停、倒放控制

    推荐阅读 CSDN主页 GitHub开源地址 Unity3D插件分享 简书地址 我的个人博客 大家好,我是佛系工程师 ☆恬静的小魔龙☆ ,不定时更新Unity开发技巧,觉得有用记得一键三连哦。 在日常开发中,常常会遇到要控制动画的播放、暂停和倒放的情况。 这篇文章就总结一下, Animation

    2024年02月02日
    浏览(96)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包