Unity3d Unity如何在调用静态方法之前唤醒运行?

Unity3d Unity如何在调用静态方法之前唤醒运行?,unity3d,static,Unity3d,Static,我使用MyUILayoutManager类来管理UI元素之间的相对大小。 我的理解是,清醒的人比其他人跑得早。这似乎是不正确的 在MyUILayoutManager的Awake()方法中,我抓取根画布并进行测量: RectTransform canvasTransform = //get the RectTransform of the canvas screenWidth = canvasTransform.sizeDelta.x;

我使用MyUILayoutManager类来管理UI元素之间的相对大小。 我的理解是,清醒的人比其他人跑得早。这似乎是不正确的

在MyUILayoutManager的Awake()方法中,我抓取根画布并进行测量:

            RectTransform canvasTransform = //get the RectTransform of the canvas
            screenWidth = canvasTransform.sizeDelta.x;
            screenHeight = canvasTransform.sizeDelta.y;
然后,我有几个静态方法,可以根据画布大小调整组件的大小:

public static void setSizeRelativeToScreen(
   GameObject gameObject,
   float percentageOfScreenWidth,
   float percentageOfScreenHeight)
但是,静态方法在唤醒方法确定画布大小之前运行。这意味着组件的大小相对于0 x 0。剧透将0与任何值相乘将得到0,因此这不会给出所需的结果

在进行任何静态调用之前,是否有方法使Awake()运行

如果我尝试将Awake()设为静态,它将无法访问用于检索画布的RectTransform的GameObject

(我使用的是Unity 2019.4.18f1)

与Awake()不同,Unity不会自动调用静态方法,这意味着在代码中的某个地方您自己调用了setSizeRelativeToScreen()。您可能在另一个类的Awake()方法中调用它。问题是,无法保证使用setSizeRelativeToScreen()的Awake()方法将在MyUILayoutManager类的Awake()方法之后调用。为了解决这个问题,只需从Start()内部调用setSizeRelativeToScreen()方法,而不是从Awake()内部调用,因为Start()是在Awake()之后调用的,这将解决您的问题