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

Unity脚本触发吐司涂黄油动画失败问题求助

涂吐司屏幕变黄动画播放问题及解决方案

需求

实现涂吐司时播放屏幕变黄的动画,完成后切换场景。

现有代码

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

public class Toast : MonoBehaviour
{
    Ray ray;
    RaycastHit raycastHit;
    public Camera cam;
    public GameObject ButterIt;
    private float myTimer = 0f;
    private bool isCounting = false;
    private Animation anim;
    public GameObject yellow;

    void Start()
    {
        cam = GetComponent<Camera>();
        anim = gameObject.GetComponent<Animation>();
        yellow.SetActive(false);
    }

    void Update()
    {
        ray = new Ray(transform.position, transform.forward * 100);
        if (Physics.Raycast(ray, out raycastHit))
        {
            if (raycastHit.transform.tag == "Death")
            {
                ButterIt.SetActive(true);
                if (Input.GetKeyDown("f"))
                {
                    Debug.Log("Stop Touching My Junk You Pervert! - Tickle Me Bender");
                    isCounting = true;
                }
            
            }
            else
            {
                ButterIt.SetActive(false);
            }
        }

        if (isCounting)
        {
            myTimer += Time.deltaTime;
        }

        if (myTimer > 2.5f)
        {
            yellow.SetActive(true);
            Debug.Log("WEE WOO WEE WOO - Patrick");
            isCounting = false;
            anim.Play("YellowFade");
        }
    }
}

遇到的报错

  • Animation组件使用的AnimationClip "YellowFade"必须标记为legacy;
  • 将其设为legacy后触发动画,提示主相机未附加动画;
  • 尝试添加动画时,提示legacy片段不允许在Animator控制器中使用。

解决方案

方案1:改用Animator组件(推荐,Unity现代工作流)

这是Unity目前主推的动画方案,彻底规避Legacy的兼容性问题:

  1. 移除挂载Toast脚本的GameObject上的Animation组件,添加Animator组件。
  2. 右键项目面板 → Create → Animator Controller,创建新控制器并拖入Animator组件的Controller字段。
  3. 打开Animator窗口,创建默认空状态,将YellowFade动画(保持非Legacy状态)拖入窗口,设置为该状态的动画片段。
  4. 修改代码中的动画逻辑:
    • 替换private Animation anim;为private Animator anim;
    • Start方法中改为anim = GetComponent<Animator>();
    • 播放动画时调用anim.Play("YellowFade");

方案2:修复Legacy Animation组件问题

如果一定要保留Legacy动画:

  1. 选中YellowFade动画文件,在Inspector面板勾选Legacy选项。
  2. 确保挂载Toast脚本的GameObject上已添加Animation组件,并且把YellowFade动画拖入组件的Clips列表。
  3. 检查代码中anim = gameObject.GetComponent<Animation>();是否正确获取组件——若脚本没挂在主相机上,需确认挂载对象有Animation组件。
  4. 播放动画时可先做合法性判断:
    if(anim != null && anim.GetClip("YellowFade") != null)
        anim.Play("YellowFade");
    

额外优化建议

  • 屏幕变黄效果可以简化:在主相机下添加全屏UI Image(黄色),用Animator控制其透明度从0到1再到0,无需单独的yellow GameObject。
  • 动画完成后切换场景,可在动画末尾添加动画事件,调用SceneManager.LoadScene("目标场景名");,记得在代码顶部引入using UnityEngine.SceneManagement;。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.21 07:53:31