建立个人网站费用,win7可以做网站吗,移动网站开发认证考试,广东手机网站建设费用文章目录 前言开始完结 前言 
添加程序摇摆和摆动是为任何FPS游戏添加一些细节的非常简单的方法。但是并不是所以的模型动画都会配有武器摆动动画效果#xff0c;在本文中#xff0c;将实现如何使用一些简单的代码实现武器摇摆和摆动效果#xff0c;这比设置动画来尝试实现类… 文章目录 前言开始完结 前言 
添加程序摇摆和摆动是为任何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);}
}代码挂载在武器父类上即可  正常情况下我们还要实现武器在瞄准时减低或者禁用武器摆动效果可以选择在瞄准时启动和禁用SwayNBobScript脚本 
public SwayNBobScript swayNBobScript;private void Update()
{DetermineAim();
}//瞄准
void DetermineAim(){swayNBobScript.enabled  true;if (Input.GetMouseButton(1)){swayNBobScript.enabled  false;} 
}效果  
完结 
赠人玫瑰手有余香如果文章内容对你有所帮助请不要吝啬你的点赞评论和关注以便我第一时间收到反馈你的每一次支持都是我不断创作的最大动力。当然如果你发现了文章中存在错误或者有更好的解决方法也欢迎评论私信告诉我哦 
好了我是向宇https://xiangyu.blog.csdn.net 
一位在小公司默默奋斗的开发者出于兴趣爱好最近开始自学unity闲暇之余边学习边记录分享站在巨人的肩膀上通过学习前辈们的经验总是会给我很多帮助和启发php是工作unity是生活如果你遇到任何问题也欢迎你评论私信找我 虽然有些问题我也不一定会但是我会查阅各方资料争取给出最好的建议希望可以帮助更多想学编程的人共勉~