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

Unity Editor执行脚本时卡顿无报错问题求助

Unity Editor执行脚本卡顿问题排查与解决

执行脚本时编辑器出现卡顿(仍可响应),无任何警告或错误提示,修改其他else if分支后问题依旧。相关代码片段如下:

public partial class UseItem()
{
    ...
    else if (this.item[this.itemSelected] == 5)
    {
        Ray ray3 = Camera.main.ScreenPointToRay(new Vector3((float)(Screen.width / 2), (float)(Screen.height / 2), 0f));
        RaycastHit raycastHit3;
        if (Physics.Raycast(ray3, out raycastHit3))
        {
            if (raycastHit3.collider.name == "BSODAMachine" && Vector3.Distance(playerTransform.position, raycastHit3.transform.position) <= 10f)
            {
                ResetItem();
                raycastHit3.collider.gameObject.name = "EmptyMachine";
                raycastHit3.collider.gameObject.transform.GetChild(0).gameObject.GetComponent<MeshRenderer>().material = OutOfBsoda;
                raycastHit3.collider.gameObject.GetComponent<AudioSource>().Play();
                while (raycastHit3.collider.gameObject.GetComponent<AudioSource>().isPlaying)
                {

                }
                CollectItem(4);
            }
            ...
}

问题根源

代码中的空while循环会阻塞Unity主线程,直到音频播放完毕。Unity主线程负责处理渲染、输入、脚本逻辑等核心操作,被持续占用时就会出现编辑器卡顿现象。

解决方法

用Unity的协程(Coroutine)替代同步阻塞的while循环,让音频等待逻辑在后台执行,不占用主线程:

  1. 替换原有的while循环部分:
// 先缓存AudioSource引用,避免重复调用GetComponent
AudioSource audioSource = raycastHit3.collider.gameObject.GetComponent<AudioSource>();
audioSource.Play();
// 启动协程等待音频结束后执行收集逻辑
StartCoroutine(WaitForAudioFinish(audioSource));
  1. 实现对应的协程方法:
private IEnumerator WaitForAudioFinish(AudioSource audioSource)
{
    // 等待音频播放结束
    yield return new WaitWhile(() => audioSource.isPlaying);
    // 音频结束后执行收集操作
    CollectItem(4);
}

额外优化建议

  • 避免频繁调用GetComponent,提前缓存组件引用可以减少性能开销;
  • 字符串比较raycastHit3.collider.name == "BSODAMachine"效率较低,建议改用标签(Tag),通过raycastHit3.collider.CompareTag("BSODAMachine")判断,或者给目标物体添加专属脚本作为标识;
  • 用Vector3.SqrMagnitude替代Vector3.Distance做距离判断:(playerTransform.position - raycastHit3.transform.position).sqrMagnitude <= 100f(10的平方),减少开方运算的性能消耗。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.24 06:12:03