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

如何编写Unity材质脚本实现材质“显现”效果?

实现Unity材质的“显现”效果(反向腐蚀)

你的腐蚀脚本是通过让_Erode参数从0递增到1,逐步扩大材质的腐蚀/溶解区域。要实现完全相反的“显现”效果,只需要把参数的变化逻辑反过来——让_Erode从1递减到0,逐步缩小腐蚀区域,最终让物体完全显示出来。

修改后的脚本如下:

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class Reveal : MonoBehaviour
{
    public float revealRate = 0.03f;
    public float revealRefreshRate = 0.01f;
    public float revealDelay = 1f;
    public Material materialSlot1;

    void Start()
    {
        StartCoroutine(MaterialReveal());
    }

    IEnumerator MaterialReveal()
    {
        yield return new WaitForSeconds(revealDelay);

        float t = 1; // 初始为完全腐蚀状态
        while (t > 0)
        {
            t -= revealRate;
            // 确保t不会低于0,避免出现异常值
            t = Mathf.Max(t, 0);
            materialSlot1.SetFloat("_Erode", t);
            yield return new WaitForSeconds(revealRefreshRate);
        }
    }
}

关键修改说明

  • 初始值调整:将t的初始值设为1,对应材质的完全腐蚀/隐藏状态
  • 循环逻辑反转:循环条件改为t > 0,每次循环让t减去revealRate,实现从1到0的递减
  • 边界处理:用Mathf.Max(t, 0)确保t不会低于0,避免传递给材质的参数出现负数导致异常
  • 命名优化:把变量名从erodeXXX改为revealXXX,更贴合功能逻辑(也可以保留原命名,根据个人习惯调整)

需要注意的是,这个修改的前提是你的材质Shader中,_Erode参数的逻辑是数值越高,腐蚀区域越大。如果Shader的逻辑是反过来的,那只需要保持t从0到1的递增,但调整Shader里的判断条件即可(比如把<改成>)。

内容的提问来源于stack exchange,提问作者Fire Bird

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.04 16:33:16