【unity小技巧】实现FPS射击游戏枪武器随镜头手臂摇摆效果

前言

如果我们视角移动转向,武器如果不跟着进行摇摆,会感觉我们的动作很生硬,特别是射击类游戏,如下
在这里插入图片描述

实现武器摇摆这里主要分享两种实现方法,一种是改变武器位置,一种是修改武器旋转

方法一、改变武器位置

public class WeaponSway : MonoBehaviour
{
    
    
    /* 摇摆的参数 */
    public float amount; // 摇摆幅度
    public float smoothAmount; // 平滑值
    public float maxAmount; // 最大摇摆幅度
    private Vector3 originalPosition; // 初始位置

    void Start()
    {
    
    
        // 自身位置(相对于父级物体变换得位置)
        originalPosition = transform.localPosition;
    }

    void Update()
    {
    
    
        // 设置武器手臂模型位置的值,(鼠标反转)
        float movementX = -Input.GetAxis("Mouse X") * amount;
        float movementY = -Input.GetAxis("Mouse Y") * amount;

        // 限制摇摆范围
        movementX = Mathf.Clamp(movementX, -maxAmount, maxAmount);
        movementY = Mathf.Clamp(movementY, -maxAmount, maxAmount);
        Vector3 finalPosition = new Vector3(movementX, movementY, 0);

        // 手柄位置变换
        transform.localPosition = Vector3.Lerp(transform.localPosition, finalPosition + originalPosition, Time.deltaTime * smoothAmount);
    }
}

挂载配置参数
在这里插入图片描述
效果
在这里插入图片描述

方法二、改变武器旋转

public class WeaponSway2 : MonoBehaviour
{
    
    
    public float amount; // 摇摆幅度
    public float smooth; // 平滑度 

    private void Update()
    {
    
    
        // 获取鼠标输入
        float mouseX = Input.GetAxisRaw("Mouse X") * swayMultiplier;
        float mouseY = Input.GetAxisRaw("Mouse Y") * swayMultiplier;
        

        // 计算目标旋转
        Quaternion rotationX = Quaternion.AngleAxis(-mouseY, Vector3.right);
        Quaternion rotationY = Quaternion.AngleAxis(mouseX, Vector3.up);
        Quaternion targetRotation = rotationX * rotationY;

        // 旋转
        transform.localRotation = Quaternion.Slerp(transform.localRotation, targetRotation, smooth * Time.deltaTime);
    }
}

挂载配置参数
在这里插入图片描述
效果
在这里插入图片描述

结语

想要使用哪种方法都可以,看你自己喜欢,如果是我,我会选择第二种,比较简单,参数也少,而且个人感觉效果也更好,已枪中心做旋转更符合现实。

完结

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

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

一位在小公司默默奋斗的开发者,出于兴趣爱好,于是最近才开始自习unity。如果你遇到任何问题,也欢迎你评论私信找我, 虽然有些问题我可能也不一定会,但是我会查阅各方资料,争取给出最好的建议,希望可以帮助更多想学编程的人,共勉~
在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/qq_36303853/article/details/134884078