最近我在Wallpaper Engine上法线了一款有趣的壁纸,
不放音乐的时候
当音乐响起的时候
然后我就想,这个如何用Unity实现,我们先来观察,便面上每个点的运动毫无规律,实际上它们每个点都有自己的方向,当点到达屏幕边缘时,反弹;当音乐响起时,它只会随着音乐的节奏加速运动和放大,它的运动轨迹并没有变化;当相邻的两个点足够近的时候连接,足够远就断开。好了分析到这里,案子已经结了。
我们首先来实现它的运动部分和连接部分,音乐响应部分会在(下)篇来实现。
我们首先针对一个点来做:
在start的时候,给这个点一个随机的位置和一个随机的方向
thispoint = this.transform;
thispoint.position = new Vector2(Random.Range(-9.0f, 9.0f), Random.Range(-5.0f, 5.0f));
way = new Vector2(Random.Range(0.0f,1.0f), Random.Range(0.0f, 1.0f));
在fixedupdate函数中,让这个点保持一定的速度,朝着这个方向运动
private void FixedUpdate()
{
thispoint.Translate(way * gamectrl.speed*Time.fixedDeltaTime);
}
在update函数中,我们判断这个点是不是碰撞到了屏幕边缘,如果碰撞了,我们需要做的就是计算它的反弹方向,并把这个方向赋给二维方向变量way
private void Update()
{
checkside();
}
private void checkside()
{
if (Mathf.Abs(thispoint.position.x) >= 9 || Mathf.Abs(thispoint.position.y) >= 5)
{
if (thispoint.position.x >= 9)
{
way = (2*Vector2.Dot(-way, new Vector2(-1, 0))*new Vector2(-1, 0) +way).normalized;
}
else if (thispoint.position.x <= -9)
{
way = (2 * Vector2.Dot(-way, new Vector2(-1, 0)) * new Vector2(-1, 0) + way).normalized;
}