非线性计算
观察酷可的小猫派对,你会发现,武器并不是直接移动到主角的坐标,而是离得越近越慢,离得越远越快。
这种不断变化的速度,我们称之为“缓动”(又叫“非线性”)。
公式推导
而近慢远快的速度和距离的关系,可以用一张图表达出来:
其中,“速率”决定着这条射线的角度。
关系如下:
由此可见,当距离越近,他的移动速度就越慢。
那这个公式就很好猜了,一个分数,那不就是除法吗?
分母是速率,分子是X,也就是上文中的“距离”
那么他的公式就应该是:
$$x/v=y\\(终值-当前值)/速率=移动距离$$
终值就是你要缓动到的目标位置,当前值是当前的位置。举一反三,这两个值可以不仅是坐标,角度、大小、虚像等等效果都可以用缓动公式
所以,有了这个公式,就可以做许多炫酷的动效了,不仅仅局限于悬浮武器!
只要我们在循环中使用这个公式,就能够做到缓动的效果了!
实际运用
让我们在代码中实现这个效果吧!
新建一个测试用角色,然后为其编写代码:
在这段代码中,“终值”是“鼠标的坐标”、“当前值”是“当前的坐标”、“速率”是5。
让我们运行这段代码
现在,你就学会了非线性公式了。
三角函数
看见这个名字有很多人就害怕了,但是完全不用害怕,因为这部分内容不会涉及到很深奥的知识,只是浅显的运用一下三角函数。
首先,我们需要了解什么是三角函数。
去问百度,你看到的可能是:
三角函数是基本初等函数之一,是以角度(数学上最常用弧度制,下同)为自变量,角度对应任意角终边与单位圆交点坐标或其比值为因变量的函数。
这都是什么啊!!!
不过不用担心,今天我半篇文章把三角函数的基础概念交给你!。
sin,cos
我们预想一个场景:
我们有一个角色1,他的坐标在0,0,我们想让他在下一帧朝向30度方向移动10步,并且角度不变。
如果不使用三角函数的话,就只能先缓存当前角度,然后面向那个角度,移动10步,然后面向之前缓存的角度。
但是有了三角函数,就完全不会花费这么多时间。
首先,我们使用“sin”计算出X坐标要移动到的地方,这里我们只需要通过“sin(角度)”就可以获得X坐标在这个角度下移动1步的距离。
有了移动1步的距离,接下来只需要乘以他对应的距离就行了。
对于Y轴对应的坐标,我们需要使用另一个公式“cos(角度)*距离”。
这样,只要我们的X和Y分别增加对应的公式,我们就能够移动到我们的目标位置了。
整个逻辑如下:
由此可见,在scr的坐标系中,三角函数的sin可以用于X轴角度对应坐标的计算,sin可以用于Y轴角度对应坐标的计算。
所以在数学中,cos用于X轴计算,sin用于Y轴计算;
而在scr中,sin用于X轴计算,cos用于Y轴计算。
切勿把scr坐标系和数学坐标系搞混了哦!
实际运用
现在我们了解了三角函数的基本用法,让我们来制作一下武器悬浮的效果。
仔细观察小猫派对的武器悬浮,他是中间快,两边慢。
这单纯的使用变量或者非线性公式是很难做到的,这时,就需要我们利用三角函数的特性了!
让我们来捋一捋思绪,这个移动曲线和圆只看一个轴不是一样的吗?
我们从侧面去看一个圆,想象有一个点在圆的边长上游走,会发现,当点走到中间的地方,他目前的移动轨迹和我们的摄像头趋近于水平;当点走到上下方时,他目前的移动轨迹和我们的摄像头趋近于垂直。
观察上图,在移动轨迹水平时,我们摄像机观察的就是小球移动方向的侧面,能更直观的看见小球的移动;反之,在垂直的移动方向观察的小球,在摄像头看来,根本没有移动,因为他们的相对的Y轴位置并没有多少改变。
这时,我们让小球的X轴不再移动,会发现,他的Y轴会随着他的位置变化而改变速度。
这就是小猫派对武器悬浮的原理。
<iframe
width="100%"
height="800px"
scrolling="no"
src="https://www.ccw.site/embed?id=WhiteCat101/baimao/Lec3/01&type=comment"
title="{小猫3-怎样让武器悬浮起来}"
frameBorder="0"
allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share"
allowFullScreen
scrolling="0"
></iframe>