Unity插件:UFPS使用教程(一)
Unity插件:UFPS使用教程(一)
先挂上UFPS官方文档:https://docs.google.com/document/d/17Ns3PwlSWg4kqWwnBZ4DRa9n_LMSOe7m3KzMfsPUGBI/pub?embedded=true#h.6j3sw4swd9o8
由于本人要用到这个插件,而关于这个插件国内的资料奇少,但同时它涵盖的内容很多,所以我决定一遍看官方文档一遍做笔记,就等于把它的内容大概了解一遍。但这是本人第一次翻译,所以翻译的奇烂无比。请各位看官见谅。另外因为我的技术非常菜,所以以下内容肯定有错误的地方,请各位海量,可以在评论区里留言,欢迎讨论。
一. 关于ufps动画机的几个基本概念
Ufps动画机一个好处就是它充分利用了程序化动作模拟(procedural motion,后面用pm指代)来制作有关武器和摄像头的动作。它不依赖于传统的“有规律可循“的unity动画机制,而是通过玩家输入,和各种游戏内物理效果的实时演算。这使得游戏内所有事物都更加组织分明,所有行动都更加自然。
Pm另一个好处就是你不需要分别模拟出每个武器的运动。牵一发而动全身,你可能只是动过手枪,但ufps会实时计算出这一动作对其它物体的影响并显示出来。
综合运用好pm和传统unity动画机制,会使得你的游戏动作更加鲜活和富有张力,让你的游戏更加真实。
- 阻尼振动(Springs)中学物理学过
UFPS的核心支撑就是阻尼振动系统。
它一般有一个中停地(Rest State, Static Equilibrium),是它最终要停下的地方。强度(Stiffness)决定了弹簧的松弛程度,会影响到弹簧能弹多高。阻尼(Damping)会削减弹簧速度。
击在墙上的箭,镜片上的水珠都符合这种运动方式。
2. 正弦运动(Bob)
第一人称射击中人物行走相机上下会采取BOB移动(虽然现代射击游戏里Bob的影响很少但还是存在)。如果在x轴和y轴都使用Bob移动,你会感觉你像一个恐龙或者一个身材庞大的巨兽。
3. 噪声(Noise)
这个看图就明白了,就是柏林噪声产生的随机骚动。烟雾,镜头晃动都会用到。
4. 动画机
UFPS只能在模型的节点和transform上移动,他们不能处理更加复杂的动画机,比如手指板动扳机。这些需要你做出这类动画,同时UFPS会提供调度程序来播放这些动画。
5. 计时器(Timers)
Vp_timer
二. vp_FpController
- Motor
A. acceleration
移动时controller每帧的世界坐标系下的速度量
B. Damping
移动停下时速度降低的加速度。过低的damping会让玩家感觉在冰面上。
注:要是不想可以让你的游戏里操作飘,就把acceleration和damping都设为1,让后减小damping直到你对这个行走满意为止,这样能得到一个能及时停下的controller。
注:想知道玩家的最大速度,就输入Debug.Log(Controller.Velocity.magnitude)
C. Air Speed
Controller不和地面接触时的速度。0代表着玩家在天上时不能向四边移动。1代表着玩家可以在天上和地上移动的一样快。这会影响玩家对游戏操作的感觉,尤其在平台跳跃为主的游戏场景中。
D. Slope Speed Up
决定了上坡时增加/减少controller速度大小。1代表了上坡时的速度和在平地上基本一样。小于或大于1使得上坡速度放慢或增加。
E. Slope Speed Down
和上面一样
F. Free Fly
启用后在天上时可以自由的移动,适用于零重力,水下游泳,或者超人的飞翔。Physics的Gravity Modifier为0或者非常低时这个效果会更好。
跳起来后镜头会向上升,蹲下时镜头下降。如果controller 有地面接触碰撞体只会收缩。 - Jump
A. Force
在一个单独帧里跳起来时,上升的力的大小。挑起的高度也会被重力所影响。
B. Force Damping
决定了jump force多久会减小至0
C. Force(Hold)
如果跳跃键一直按下每帧的对跳跃的力的大小。如果不需要这个功能,把它设为0.
D. Force Damping(Hold)
决定了hold jump force多久减小至0 - Physics
A. Force Damping
决定了controller对外界力的作用的接受程度,比如爆炸的后作用力。1代表着根本不受影响,就像个很重的物体。0代表着受影响特别大,就像很轻的物体。
B. Push Force
决定了推动一个实体时力的大小。非常大mass的实体会很难被推动。
C. Gravity Modifier
决定了controller受重力影响有多大。更高的数值会有更重的感觉。Unity的Physics.Gravity也会影响物体。
D. Slope Slide Limit
当倾斜程度到这个临界角度时,controller会开始滑落。
E. Slope Slidiness
地面的光滑程度。如果比CharacterController的slopelimit更陡峭,会有叠加光滑程度。
F. Wall Bounce
会使得character controller受到外力时被弹飞(平时它不起作用)
G. Wall Friction
决定了受到外力比如爆炸时character controller应该滑多少(平时不起作用)
H. Has Collision Trigger
启用后会在开始时产生一个子游戏物体,带着一个capsule collider trigger。能和接触到的实体互动。
注:这个collision trigger有时会影响raycast或者trigger的效果。如果raycast没击中玩家,要确保raycast打在charactercontroller上,或者从trigger上用sendmessageupwards向controller发送条消息。可以参照vp_hitscanbullet
三. Vp_FPCamera
1. Rendering
A.Field of view
摄像机视野大小
B.Zoom Damping
当FOV在代码里改变时,摄像头变到目标状态时有多快。更高的值变动越慢。
C.disable VR mode on startup
顾名思义 - Poisition Spring
Camera position需要2个springs,一个是“常规”Springs,用来对玩家的行动做出反映,是一个较为松动的springs;另一个是更硬一些的Springs,用来对外力作出反应,如摄像机晃动。
A. Offset
相对于玩家的camera position差值。比如蹲下,只需要降低camera offset的y轴大小。窥视四周可以让摄像机沿着x轴移动。
B. Ground Limit
一个垂直的极限,防止摄像机插入地面。决定了当跪下或者受到外力或者bob时它能到头下方多远。
C. Spring Stiffness/Damping
Spring1的强度/阻尼
D. Spring2 Stiffness/Damping
这个Spring不会自启,只有调用vp_Fpcamera的AddForce2方法才能用到Spring2。
E. Kneeling
当玩家掉到地表上摄像机掉下多远。
F. Kneeling Softness
决定了玩家掉落时摄像机运动的帧数。数值越大,kneeling的过程越长。
G. Earthquake Factor
加剧或降低振动施加给摄像机的下作用力
2.Rotation
摄像机方向主要被鼠标输入和摄像机晃动影响。它还有一个rotation spring,主要被用来通过外力绕z轴旋转。
A. pitch limit
限制了摄像机竖直方向的旋转。
B. Yaw Limit
限制摄像机水平的旋转。主要用于炮台,也用于车上的玩家。
C. Kneeling
当玩家落在地表上,摄像机旋转多少。有50%概率摄像机在作用力下会从左向右旋转。
D. Kneeling Softness
数值越大,kneeling过程越慢
E. Strafe Roll
移动和蹲下时用到。摄像头相比于charactercontroller转动路径的rotation。
F. Earthquake Factor
加剧或降低振动施加给摄像机的下作用力 - Shake
使用柏林噪声使得武器和镜头振动。比如瞄准时的轻微震动,手里拿着机关枪闲置时的轻微晃动,还有喝醉酒和下毒后的摄像机的晃动。
A. Speed
决定摄像机晃动速度
B. Amplitude
摄像机围绕x,y,z轴的角度上的晃动强度。X和y轴晃动作用域角色上的具体操作,z轴上晃动只会作用于相机。如果增加这个强度,会得到一个类似于喝醉了之后的体验。这也会用于狙击枪的晃动上因为它会影响瞄准。 - Bob
相机的正弦运动。如果x轴和y轴同时应用bob,会有种体型庞大的大怪物的感觉。
A. Rate
摄像机bob运动的速度。X,y,z是位置上的运动。W是绕向前方向的旋转(将头部从左向右倾斜),y的典型值为0.9.
B. Amplitude
Camera bob的强度。决定了摄像机在每个方向上晃动多远。
C. step threshold
。。。后面的那几个没太看懂,大家有明白的在评论区里留言。后续搞明白了我会再更新,也可能永远不更新。就这样把反正。。
四. Weapons:vp_fpweapons(撬棍什么的也算在武器里)
把枪支rotation这种方式摆放(注意x,y,z轴在枪上的方向)
2.防止武器穿模
A.武器摄像头
武器用另一个摄像头渲染,但也有缺点:
1) 武器不能接受到来自外物的阴影
2) 武器摄像头可能会干预到其他的渲染多一些的物体
B.Retraction
每帧都会有raycast从武器射到环境中。每当raycast击中一些东西,武器就会相应的伸出。通过这种方式可以感觉到武器一直能和环境融合的很好。
缺点:
1) 主摄像机的fov不适合于武器,游戏就像90年代初的一样,让人感觉武器在环境中很突兀。这时需要调整武器组件rendering>z scale微调一下武器使得它不是那么突兀
2) 需要调一些设置,工作量多
以上两种方式可以互相结合
3.rendering
A.weapon prefab
武器的prefab,需要包含一个mesh filter,mesh renderer和材质。
B.fov
设置weapon camera的fov。和武器的position,rotation offset一起微调能得到一个合适的摆放效果和视野布局。
C.Zoom Damping
当fov从代码里修改时,fov插值的快慢。值越高,缩放越慢
D.Clipping Planes
决定了weapon camera最近和最远的clipping planes。推荐运行游戏时按住alt键,拖拽clipping plane:X来找到一个合适的值
E.Z Scale
微调武器位置,属于retraction方法
4.position springs
应用比如枪的后坐力
A. offset
武器的rest place位置
B. Exit offset
换武器时武器放下的位置
C. Pivot
决定了武器的中心点坐标
注:pivot和武器模型position的关系受rotations影响。所以在编辑pivot之前要关掉武器摇晃,并设置武器rotation offset为(0,0,0)
D. Pivot Stiffness
武器的中心点spring强度。
E. Pivot Damping
武器spring的阻尼
F. Show Pivot
是否展示pivot(一个蓝色透明球)
Tip:把pivot z设为-0.5让pivot回归视野
G. Spring Stiffness/Damping
武器spring强度/阻尼
H. Spring2 Stiffness/Damping
用来做像后座力这样的其他力的放映。它不会被vp_fpweapon自动使用,但vp_fpweaponshooter会调用它作为后座力。同时可以通过调用vp_fpweapon的“AddForce2”方式来使用它。
I. Kneeling
当玩家掉到地表上武器被推开多少
J. Kneeling Softness
参考摄像头的这个设置
K. Fall Retract?
当掉落时武器往后伸
L. Walk Sliding
使得武器在不同方向上移动,依赖于charactercontroller的移动方向
X,y是武器扫射时像四周的移动。Z是行走是武器前后的移动。
M. Input Velocity Scale
N. Max Input Velocity
武器摇摆的最大速度限制
像看当前武器摇摆速度:Debug.Log(Controller.Velocity.magnitude) - Rotation Springs
A. Fall away
设置武器在竖直运动(比如掉落或者走台阶)情况下的旋转
B.Look sway
决定了武器跟随鼠标反映做出的旋转。水平和竖直方向的鼠标运动会影响到武器沿着y和x轴的摇晃。武器沿着z轴的摇晃和水平方向上的鼠标移动有关,这在格斗武器比如剑棒中非常有用。
C.Slope away
当在地面移动时降低武器Fall away的效果。值为1.0时武器表现得像跟着玩家一起落地一样。为0时当controller着地时会取缔fall away效果。 - Retraction
设置retraction详细步骤
A. distance
raycast能达到的长度。典型值为0.5
B. offset
这个参数能抵消掉raycast水平和垂直方向的分量。当retraction打开后,一个debug ray会显示在scene中。若没碰到任何东西,这条ray为黄色。若碰到了,为红色。
C. Relax Speed
可调节武器在穿模情况后多快能调整到它的正轨z位置
8. shake
武器的四周晃动,主要是用于角色空闲状态时的动作,但也用于跳伞后武器的随风摇摆动作。
A. speed
决定了武器摇晃速度
B. Amplitude
武器围绕x,y,z轴的角度上的晃动力度。
9.Bob//又是熟悉的bob运动
A.Rate
和照相机bob差不多。Y一般为0.9
B.Amplitude
Y一般0.1
10.Step
为了模拟出一个很好的脚步和武器bob运动同步。每次武器bob运动到达它的底部,脚步力度都会被触发。
Tip:当使用step时候,尽量放大武器的y轴bob运动
这样能使得游戏更加真实。
A. min velocity
每次脚步作用在武器上时这个参数会设置出最小的控制器加速度。如果为0,这个step系统相当于被取消。
Debug.log(m_Controller.Velocity.sqrMagnitude)
B. step softness
每次动画的时间。数值越高,脚步的动画越慢
C. position force
决定了每次脚步接受多大的力度。这个数值最好小于0.01
D. Rotaion force
角度方向的力度。最好小于0.01
E. Position Balance
模拟出转换重量至左脚和右脚的效果,通过每一脚步更换一个位置的step。可以用它来营造出一种跛行的效果。
F. Rotation Balance
和E一样,只是角度上的效果。
11.sound
A.wield
端着武器的声音
B.unwield:放下武器的声音
12.Animation
A.wield/unwield
端着/放下武器的动画
B. ambient
一个随机的武器动画会在随机的空隙里播放。用于循环播放手和手指细小的动作,或者短暂的左手拿开的动作。
C.ambient interval
在ambient animations里的平均间隔时间