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

使用Tag定义Material.SetVector变换时出现空引用异常求助

问题排查与修复

空引用异常的核心原因

  1. 初始化时机错误:GameObject.FindWithTag("Character")在字段声明时直接执行,此时场景尚未完成加载,无法找到目标对象,导致character为null,后续访问character.transform触发异常。
  2. 未做空值校验:Material m如果未在Inspector面板赋值,调用m.SetVector也会触发空引用异常。

修复后的代码

public Material m;
private Transform player;

void Start()
{
    // 场景加载完成后再查找目标对象
    GameObject character = GameObject.FindWithTag("Character");
    if (character != null)
    {
        player = character.transform;
    }
}

void MoveGrass()
{
    // 先检查所有关键对象是否为空,避免异常
    if (m == null || player == null)
        return;
    
    m.SetVector("_PlayerPos", player.position);
}

private void OnDrawGizmos()
{
    MoveGrass();
}

private void Update() 
{
    MoveGrass();
}

额外优化建议

  • 若目标对象可能动态生成(比如场景切换后重新创建),可以把查找逻辑放到Update里,但要加判断避免重复查找:
    void Update()
    {
        if (player == null)
        {
            GameObject character = GameObject.FindWithTag("Character");
            if (character != null)
            {
                player = character.transform;
            }
        }
        MoveGrass();
    }
    
  • 在Inspector面板给m赋值对应的材质,确保引用有效。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.08 05:45:39