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
,以缩小调用站点的范围。希望只有少数方法,您可以查看代码以确定从工作线程调用了哪些方法。