Unity实现流水灯的几种思路(类比嵌入式)

搞过嵌入式开发的人应该都知道最简单的入门级程序就是流水灯,如果没见过的话,你可以看一下地铁门上方的站点LED灯,大概就是下图这个效果:
51单片机流水灯效果
没错,不是“Hello world”,可能对于应用层程序而言,最简单的程序应该是“Hello World”,但是如果在单片机开发中要实现显示“Hello World”的效果,如果你用LED显示,你需要懂字库;如果用LCD显示,你可能需要了解LCD驱动程序,这都不是一个初学者所能掌握的,反而是这种只需要置0或1的电平操作要更简单一些。
然而在Unity中要实现流水灯,大概对于初学者有一定的难度,反正笔者在刚接触的Unity的时候试着写了一个流水灯类似的Unity程序,自然是Bug百出,然后百度搜也搜不到,一搜全是单片机的流水灯。所以写下这篇文章,为那些和我遇到同样问题,但又无处寻找答案的初学者提供思路,涉及的东西不太深,大神勿喷。

实现效果及思路

我这里用材质颜色代替灯光,为了效果更明显些,而且这种方式对新手也比较友好,你也可以用灯光组件强度来实现,效果都差不多,最终效果如下图:
最终效果
这里分成两步:

  1. 循环定时回调
  2. 更改材质

对于定时回调提供五种思路:

  1. InvokeRepeating实现
  2. 协程加while(true)实现
  3. Plane大神的PETimer插件实现
  4. 声明定时变量实现
  5. 修改Time面板中的Fixed Timestep的值,并在FixedUpdate中实现

对于更改材质提供三种思路(参考嵌入式开发思路):

  1. 把所有情况都写出来,逐个更改材质
  2. 先把所有材质置白,指定的材质置红
  3. 使用变量记录上一次索引,发现这次的变量和上次不一样时更改材质,然后将上次索引改为这次的索引

下面对以上8个思路一一实现如下:

更改材质函数实现一(穷举)

代码实现如下:

private int index = 0;
public List<MeshRenderer> sphereList;

public void ChangeMat01(int tid){
   
        switch (index){
   
            case 0:
                sphereList[4].material.color = Color.white;
                sphereList[0].material.color = Color.red;
                break;
            case 1:
                sphereList[0].material.color = Color.white;
                sphereList[1].material.color = Color.red;
                break;
            case 2:
                sphereList[1].material.color = Color.white;
                sphereList[2].material.color = Color.red;
                break;
            case 3:
                sphereList[2].material.color = Color.white;
                sphereList[3].material.color = Color.red;
                break;
            case 4:
                sphereList[3].material.color = Color.white;
                sphereList[4].material.color = Color.red;
                break;
        }
        index++;
        index %=
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值