You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

Mathf.MoveTowards函数无效果,无法实现图片淡入淡出过渡

Mathf.MoveTowards函数无效果,无法实现图片淡入淡出过渡

嘿,我一眼就瞅到问题所在啦——你犯了一个Unity新手常踩的小坑:Mathf.MoveTowards是有返回值的,你必须把它的计算结果重新赋值给你的变量!

问题根源

Mathf.MoveTowards的工作逻辑是:接收当前值、目标值和最大步长,计算出当前值向目标值移动一步后的新结果,但它不会直接修改你传入的第一个参数。你现在只是调用了这个函数,但完全没把它返回的新值存回HackScreenAlphaValue,导致这个变量一直保持初始的0值,自然看不到任何过渡效果。

修正后的代码

把你的两个方法改成下面这样,核心就是加上赋值操作:

淡入逻辑(EnterHackScreenHud)

public void EnterHackScreenHud()
{
    // 关键:将MoveTowards的返回值赋值回原变量
    HackScreenAlphaValue = Mathf.MoveTowards(HackScreenAlphaValue, HackScreenAlphaValueSetPoint, HackScreenTransitionSpeed * Time.deltaTime);
    HackScreenColorVector.w = HackScreenAlphaValue;
    HackScreenFilter.color = HackScreenColorVector / 255f;
}

淡出逻辑(ExitHackScreenHud)

public void ExitHackScreenHud()
{
    // 同样要赋值返回值
    HackScreenAlphaValue = Mathf.MoveTowards(HackScreenAlphaValue, 0, HackScreenTransitionSpeed * Time.deltaTime);
    HackScreenColorVector.w = HackScreenAlphaValue;
    HackScreenFilter.color = HackScreenColorVector / 255f;
}

额外注意事项

  • 把之前硬写的30f改回HackScreenTransitionSpeed * Time.deltaTime,这样过渡速度是帧无关的,不会因为设备帧率高低导致过渡忽快忽慢。
  • 确认HackScreenAlphaValue的初始值是0(符合淡入的起始状态),HackScreenAlphaValueSetPoint是你想要的目标alpha值(比如你之前测试的30,对应除以255后是0.117左右的透明效果)。
  • 你之前直接设置HackScreenColorVector.w能生效,这也验证了颜色赋值的逻辑是对的,问题完全出在没接收MoveTowards的返回值上。

以后用Unity Mathf类里的这类计算函数(比如Lerp、SmoothDamp)都要记住:它们都是返回计算后的新值,不会原地修改输入变量,一定要记得赋值回去哦!

火山引擎 最新活动