用unity实现动态粒子效果(上)【详细】

最近我在Wallpaper Engine上法线了一款有趣的壁纸,不放音乐的时候当音乐响起的时候然后我就想,这个如何用Unity实现,我们先来观察,便面上每个点的运动毫无规律,实际上它们每个点都有自己的方向,当点到达屏幕边缘时,反弹;当音乐响起时,它只会随着音乐的节奏加速运动和放大,它的运动轨迹并没有变化;当相邻的两个点足够近的时候连接,足够远就断开。好了分析到这里,案子已经结了。我们首...
摘要由CSDN通过智能技术生成

最近我在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;
            }
       
  • 12
    点赞
  • 26
    收藏
    觉得还不错? 一键收藏
  • 5
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值