在Grid Layout中获取对象的位置

gre*_*Bow 3 transform grid-layout unity-game-engine

如何在网格布局中获取对象的实际位置?在我当前的迭代中,symbolPosition保持返回0,0,0.

public void OnPointerClick (PointerEventData eventData)
{
    // Instantiate an object on click and parent to grid
    symbolCharacter = Instantiate(Resources.Load ("Prefabs/Symbols/SymbolImage1")) as GameObject;
    symbolCharacter.transform.SetParent(GameObject.FindGameObjectWithTag("MessagePanel").transform);

    // Set scale of all objects added
    symbolCharacter.transform.localScale = symbolScale;

    // Find position of objects in grid
    symbolPosition = symbolCharacter.transform.position;
    Debug.Log(symbolPosition);
}
Run Code Online (Sandbox Code Playgroud)

Col*_*ite 6

位置值将不会更新,直到下一帧.为了允许您进行大量更改而不会导致对这些元素进行全部重新计算,它会存储需要计算的项目,然后在下一帧的开头更新它们.

所以一个选择是使用Coroutine等待一个帧然后获得位置

public void OnPointerClick (PointerEventData eventData)
{
    // Instantiate an object on click and parent to grid
    symbolCharacter = Instantiate(Resources.Load ("Prefabs/Symbols/SymbolImage1")) as GameObject;
    symbolCharacter.transform.SetParent(GameObject.FindGameObjectWithTag("MessagePanel").transform);

    // Set scale of all objects added
    symbolCharacter.transform.localScale = symbolScale;

    StartCoroutine(CoWaitForPosition());
}

IEnumerator CoWaitForPosition()
{
    yield return new WaitForEndOfFrame();
    // Find position of objects in grid
    symbolPosition = symbolCharacter.transform.position;
    Debug.Log(symbolPosition);
}
Run Code Online (Sandbox Code Playgroud)