You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Unity技术问询:如何实现屏幕边缘向内收缩的轮廓线倒计时计时器

实现屏幕四周向中心收缩的倒计时轮廓思路

以下是几个实用的实现方向,结合你已掌握的UI知识可以快速落地:

方案一:基于UI Image的分边收缩(最易上手)

  • 在Canvas下创建四个全屏UI Image,分别对应屏幕的上、下、左、右四个边缘,设置好边框的厚度和颜色。
  • 给四个Image设置锚点为屏幕中心,比如顶部Image的锚点设为(0.5,1,0.5,1),调整RectTransform让它只显示顶部的一条边框;同理设置其他三个方向的Image。
  • 编写脚本控制收缩逻辑:假设总倒计时时长为totalTime,当前剩余时间为remainingTime,计算进度值progress = remainingTime / totalTime。
    • 顶部/底部Image:修改rectTransform.sizeDelta的x值为Screen.width * progress,宽度会从中心向两侧收缩。
    • 左侧/右侧Image:修改rectTransform.sizeDelta的y值为Screen.height * progress,高度从中心向上下收缩。
  • 如果你想用Slider替代Image,只需把Slider的填充方向设置为双向(比如顶部Slider的最小值和最大值对应左右两端),直接给Slider赋值progress即可。

方案二:自定义Mesh绘制动态边框(更灵活)

  • 创建一个空物体挂载MeshFilter和MeshRenderer,编写脚本生成由四条线段组成的边框Mesh(每条线段对应屏幕的一个边缘)。
  • 在Update中根据进度值,动态修改每条线段的顶点位置:比如顶部线段的两个端点,初始在屏幕左上角和右上角,随着进度降低,两个端点向屏幕中心移动,直到重合。
  • 这种方式可以实现更复杂的动画(比如收缩时的弹性效果),核心是修改Mesh.vertices数组后调用Mesh.RecalculateBounds()刷新。

方案三:Shader遮罩实现全屏边框(性能最优)

  • 用一个全屏Image,编写自定义Shader控制显示区域:
    • 在Shader中定义_Progress参数(0~1),代表剩余倒计时比例。
    • 片元着色器中,计算当前像素距离屏幕中心的范围,只显示“中心矩形区域”之外、且距离区域边缘在边框厚度内的像素。
    • 随着_Progress从1降到0,中心矩形区域逐渐扩大,边框就会向中心收缩。
  • 这种方式无需多个UI元素,单一个Image就能实现,性能消耗最低,适合适配大量设备的场景。

额外注意事项

  • 所有UI元素要设置为全屏覆盖,层级高于游戏画面,避免被游戏物体遮挡。
  • 适配不同分辨率时,用屏幕比例计算参数,不要直接写固定数值,比如用Screen.width / Screen.height保持边框比例。

内容的提问来源于stack exchange,提问作者Mr.Schtelbe

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.12 20:05:30