public void ShowScreen(CustomPanel prefab, object payload, bool isReturn = false, float durationTime = 0.5f) { if (currentPrefab == prefab) { return; } currentPrefab = prefab; CustomPanel go = Instantiate(prefab, panelsTransform); if (payload != null) { go.GetComponent <IPayloadReceiver>()?.ReceivedPayload(payload); } if (currentPanel != null) { raycaster.enabled = false; go.transform.SetAsFirstSibling(); currentPanel.FadeToZero(durationTime, () => { Destroy(currentPanel.gameObject); currentPanel = go; raycaster.enabled = true; }); } else { currentPanel = go; } }