Unity 常见BUG

目录

细节1:监听事件居然有顺序?

细节2:StopCoroutine并不能停止协程?

细节3:实例化instance的脚本需要挂载到场景中的物体中,不然无法调取

 细节4:GetComponentsInChildren获取不到隐藏物体?

 细节5:Animator窗口的状态机没有进度条

细节6:动画自动播放/播放了不正确的动画

细节7:运行失败,可能是因为脚本忘记挂载到物体上

细节8:两个模型动画不同步/播完后有延迟

细节9:Button等组件的Target Graphic可能设置错误

细节10:改变材质的代码不起效


不注意细节,找bug到崩溃。——Nobody


细节1:监听事件居然有顺序?

button.onClick.AddListener(a);
button.onClick.AddListener(b);

如上代码,这时候事件执行顺序是a→b。

button.onClick.AddListener(b);
button.onClick.AddListener(a);

上述代码事件执行顺序是b→a。

多个事件执行并非同时发生,而是有顺序的。


细节2:StopCoroutine并不能停止协程?

StopCoroutine(ie());

该代码并不能停止协程ie(),因为相当于重新调用了一遍ie()

能正常停止的开始/停止方式:

//方法一:直接引用名字
StartCoroutine("ie");//开始协程
StopCoroutine("ie");//停止协程

//方法二:用变量控制
Coroutine a;
a = StartCoroutine(ie());//开始协程
StopCoroutine(a);//停止协程


细节3:实例化instance的脚本需要挂载到场景中的物体中,不然无法调取

且需要如下代码才能实例化。

private static 脚本名称 _instance;

    public static 脚本名称 Instance
    {
        get//获取
        {
            return _instance;
        }
    }

    void Awake()
    {
        _instance = this;
    }

 细节4:GetComponentsInChildren获取不到隐藏物体?

解决方法:

GetComponentsInChildren<T>(true);

 细节5:Animator窗口的状态机没有进度条

需要选中装有该状态机的物体才有进度条


细节6:动画自动播放/播放了不正确的动画

检查conditions的值是否正确。如果设置了x=1时跳转该动画,而在动画结束未重设x的值,则会一直循环进入该动画。

conditions位置:

 


细节7:运行失败,可能是因为脚本忘记挂载到物体上


细节8:两个模型动画不同步/播完后有延迟

前提:美术组那边提供的动画是分别捆绑在两个模型上的,然而要使用状态机进行动画实时演出

修改方式:

1.在状态机的节点中修改这两个参数,取消延迟时间

2.有可能是帧数问题,一个24帧一个60帧

3.如果两个动画帧数没问题,有可能是退出时间不一样(0.94代表运行到94%时退出动画)

4.如果以上都没问题,可能是曲线被压缩,应该改成以下


细节9:Button等组件的Target Graphic可能设置错误


细节10:改变材质的代码不起效

可能是因为状态机中存在该材质相关的动画控制,去掉动画即可

猜你喜欢

转载自blog.csdn.net/makyocute/article/details/126158915