Unity3d 游戏开始时速度很快,但没有例外

Unity3d 游戏开始时速度很快,但没有例外,unity3d,shader,Unity3d,Shader,我正在努力优化我的游戏以获得更好的表现。因此,我试图使脚本调用优化使用快速但无异常,而不是慢速和安全。问题是,在该模式下,我会出现错误: PropertyToID can only be called from the main thread. 我在谷歌上搜索了一下,发现它可能是由某种着色器引起的。但我不知道如何找出哪一个或在哪里。它应该是一些调用构造函数之类的 只有在OnPostRender()函数中才能对着色器进行更改。我想没关系。请确保没有从任何构造函数或字段初始值设定项调用Shader

我正在努力优化我的游戏以获得更好的表现。因此,我试图使脚本调用优化使用快速但无异常,而不是慢速和安全。问题是,在该模式下,我会出现错误:

PropertyToID can only be called from the main thread.
我在谷歌上搜索了一下,发现它可能是由某种着色器引起的。但我不知道如何找出哪一个或在哪里。它应该是一些调用构造函数之类的


只有在
OnPostRender()
函数中才能对着色器进行更改。我想没关系。

请确保没有从任何构造函数或字段初始值设定项调用
Shader.PropertyToID
。而不是将此代码移动到
Awake()
Start()
方法。大概是这样的:

class MyClass: MonoBehaviour
{
    int somePropertyID = Shader.PropertyToID("SomePropertyID");   //<-- ERROR: this is field initializer

    MyClass()                                                     //<-- ERROR: this is constructor 
    {
        somePropertyID = Shader.PropertyToID("SomePropertyID");
    }

    void Awake()                                                   //<-- THIS IS OK!
    {
        somePropertyID = Shader.PropertyToID("SomePropertyID");
    }

    void Start()                                                   //<-- THIS IS OK!
    {
        somePropertyID = Shader.PropertyToID("SomePropertyID");
    }
}
class MyClass:MonoBehavior
{

int somePropertyID=Shader.propertyId(“somePropertyID”);//您使用的是
System.Threading
还是其他线程API?当尝试在另一个线程中使用Unity类时,通常会出现这种错误。只有在我使用System.Threading的地方,才是在TextMeshPro插件中。可能是插件被窃听了吗?我在整个项目中使用它,所以禁用它真的很烦人。请检查您的调试以确保安全nd调用
PropertyToID
的位置,如果它位于工作线程内,则可能是问题所在。快速优化的问题在于它“没有显式处理异常”,您提到的错误可能一直存在,但它被悄悄隐藏。我在调试中找不到它。它应该在警告中还是在哪里?您的错误是否没有提供行位置?IDR如果线程警告提供此类信息。如果没有,请全局搜索
PropertyToID
,以缩小调用站点的范围。希望只有少数方法,您可以查看代码以确定从工作线程调用了哪些方法。