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

Unity中如何通过脚本访问并修改Shader Graph的Vector2属性

在Unity中通过脚本修改Shader Graph的Vector2属性(视差效果场景)

核心解决方案

Unity的Material类提供了两种修改Vector2属性的方法,你之前没找到是因为早期版本没有单独的SetVector2方法,但可以用通用的SetVector替代;高版本Unity也新增了更直观的SetVector2方法。

操作步骤

  1. 确认Shader Graph属性设置
    在Shader Graph中创建的Vector2属性必须勾选Exposed(暴露到Inspector),并且记住属性的Reference Name(参考名称,不是Inspector里的显示名称)——脚本中必须使用这个参考名来定位属性。

  2. 获取Material引用
    通过目标对象的Renderer组件获取材质:

    • 使用Renderer.material:会创建材质实例,仅修改当前对象的材质,适合独立背景层;
    • 使用Renderer.sharedMaterial:直接修改原始材质,会影响所有使用该材质的对象,适合批量修改。
  3. 修改Vector2属性
    两种可行方法:

    • 方法一(兼容所有Unity版本):使用SetVector,Vector2可以隐式转换为Vector4,直接传入即可:
      material.SetVector("_ParallaxOffset", new Vector2(calculatedX, calculatedY));
      
    • 方法二(Unity 2020.1及以上版本支持):使用专门的SetVector2方法,更直观:
      material.SetVector2("_ParallaxOffset", new Vector2(calculatedX, calculatedY));
      

完整示例代码

using UnityEngine;

public class ParallaxBackground : MonoBehaviour
{
    [SerializeField] private Renderer _bgRenderer;
    [SerializeField] private float _parallaxXSpeed = 0.1f;
    [SerializeField] private float _parallaxYSpeed = 0.05f;

    private Material _bgMaterial;
    private Vector2 _currentOffset;

    private void Start()
    {
        // 获取当前对象的材质实例
        _bgMaterial = _bgRenderer.material;
        // 读取Shader中已有的偏移值作为初始值
        _currentOffset = _bgMaterial.GetVector("_ParallaxOffset");
    }

    private void Update()
    {
        // 替换为你自己的视差偏移计算逻辑
        _currentOffset.x += _parallaxXSpeed * Time.deltaTime;
        _currentOffset.y += _parallaxYSpeed * Time.deltaTime;

        // 应用计算后的偏移到Shader属性
        _bgMaterial.SetVector("_ParallaxOffset", _currentOffset);
    }

    private void OnDestroy()
    {
        // 销毁手动创建的材质实例,避免内存泄漏
        Destroy(_bgMaterial);
    }
}

注意事项

  • 必须使用Shader Graph属性的Reference Name,如果你的属性参考名是_CustomOffset,脚本里就不能用显示名称比如"视差偏移"来调用。
  • 如果使用sharedMaterial修改,所有使用该材质的对象都会同步变化,注意场景中的材质复用情况。
  • 可以用GetVector方法读取当前的Vector2属性值,返回的Vector4可以直接转换为Vector2使用。

内容的提问来源于stack exchange,提问作者Sacc Ace

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.20 22:42:48