Unity 制作抖音同款 罗马时钟

本文分享了一种在Unity中实现罗马时钟的创意方法,详细介绍了文本放置、时间获取及校正的核心代码,并通过补间动画提升视觉效果,提供源码供读者参考。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

 

这个罗马时钟 好像出来好久了在某音上,刚看到 觉得很 好玩,所以自己就想着实现一下 效果。 下面直接上图

 

先说一下制作思路:1. 文本的放置位置。2.时间的获取 和校正。 3. Text随着时间的刷新 而刷新位置

主要思路 就这些,然后就是 一些动画 效果。刚开始功能出来的时候,是没有 旋转那个动画的,看上去 很low。。。

后面加了个 补间动画。

核心代码:拿月份 来说,下面 是初始化代码,就是 位置的放置。

 private void InitMonthes()
    {
        int monthesLen = Monthes.Length;
        float radius = 100.0f;
        float posX = 0;
        float posY = 0;
        float angel = 360.0f / monthesLen;
        GameObject tempObj;
        for (int i = 0; i < monthesLen; i++)
        {
            posX = _middlePoint.localPosition.x + radius * Mathf.Cos((monthesLen - i) * angel * Mathf.Deg2Rad);
            posY = _middlePoint.localPosition.y + radius * Mathf.Sin((monthesLen - i) * angel * Mathf.Deg2Rad);
            tempObj = TextFactory(_monthesTrans);
            tempObj.GetComponent<Text>().text = Monthes[i];
            tempObj.GetComponent<TextState>().Init(new Vector3(posX, posY, 0), 0.5f);
            //tempObj.transform.localPosition = new Vector2(posX, posY);
            tempObj.transform.Rotate(transform.forward, (monthesLen - i) * angel);
        }

    }

下面这个是月份的校正

 private void FixMonth(bool isInit = false)
    {
        int month = System.DateTime.Now.Month;
        _nowMonth = month;
        if (isInit)
        {
            _monthesTrans.transform.Rotate(transform.forward, 360.0f / Monthes.Length * (month - 1));       
        }
        else
        {
            //_monthesTrans.transform.Rotate(transform.forward, 360.0f / Monthes.Length);
            _monthesTrans.transform.DORotate(new Vector3(0, 0, _monthesTrans.eulerAngles.z + 360.0f / Monthes.Length), 0.8f);
        }

        if (month - 2 < 0)
        {
            _monthesTrans.GetChild(Monthes.Length - 1).GetComponent<TextState>().SetNormal();
        }
        else
        {
            _monthesTrans.GetChild(month - 2).GetComponent<TextState>().SetNormal();
        }
        _monthesTrans.GetChild(month - 1).GetComponent<TextState>().SetHighLight();
    }

在Update里面 每帧去检测时间,发生改变 然后去校正 相应的 部分。核心部分代码 就只有这些。个人觉得只是一些角度的计算,后面可以 改进一下,让秒针 转动 带动 里面 的转动,那样就更像表了,有兴趣的朋友可以试试。

Demo地址 :https://download.csdn.net/download/hnzmdlhc/12502457

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值