DialogForm的和其他界面一样,继承自UGuiForm
比起普通的界面,自己实现了这些功能(可在创建时配置的):
1.m_DialogMode
2.m_PauseGame:是否暂停界面,如果为true,在onopen(OnOpen是每次打开是调用)时就会调用一次 GameEntry.Base.PauseGame():
public void PauseGame()
{
if (IsGamePaused)
{
return;
}
m_GameSpeedBeforePause = GameSpeed;
GameSpeed = 0f;
}
3. 此外,还有这三个委托:
private GameFrameworkAction<object> m_OnClickConfirm = null;
private GameFrameworkAction<object> m_OnClickCancel = null;
private GameFrameworkAction<object> m_OnClickOther = null;
它们在OnOpen时会被注册(userid)
RefreshConfirmText(dialogParams.ConfirmText);
m_OnClickConfirm = dialogParams.OnClickConfirm;
RefreshCancelText(dialogParams.CancelText);
m_OnClickCancel = dialogParams.OnClickCancel;
RefreshOtherText(dialogParams.OtherText);
m_OnClickOther = dialogParams.OnClickOther;
它们分别会:
public void OnConfirmButtonClick()
{
Close();
if (m_OnClickConfirm != null)
{
m_OnClickConfirm(m_UserData);
}
}
public void OnCancelButtonClick()
{
Close();
if (m_OnClickCancel != null)
{
m_OnClickCancel(m_UserData);
}
}
public void OnOtherButtonClick()
{
Close();
if (m_OnClickOther != null)
{
m_OnClickOther(m_UserData);
}
}
____________________
有关产生Dialog的函数,在UIExtension中:
public static int? OpenUIForm(this UIComponent uiComponent, int uiFormId, object userData = null)
{
IDataTable<DRUIForm> dtUIForm = GameEntry.DataTable.GetDataTable<DRUIForm>();
DRUIForm drUIForm = dtUIForm.GetDataRow(uiFormId);
if (drUIForm == null)
{
Log.Warning("Can not load UI form '{0}' from data table.", uiFormId.ToString());
return null;
}
string assetName = AssetUtility.GetUIFormAsset(drUIForm.AssetName);
if (!drUIForm.AllowMultiInstance)
{
if (uiComponent.IsLoadingUIForm(assetName))
{
return null;
}
if (uiComponent.HasUIForm(assetName))
{
return null;
}
}
return uiComponent.OpenUIForm(assetName, drUIForm.UIGroupName, Constant.AssetPriority.UIFormAsset, drUIForm.PauseCoveredUIForm, userData);
}
public static void OpenDialog(this UIComponent uiComponent, DialogParams dialogParams)
{
if (((ProcedureBase)GameEntry.Procedure.CurrentProcedure).UseNativeDialog)
{
OpenNativeDialog(dialogParams);
}
else
{
uiComponent.OpenUIForm(UIFormId.DialogForm, dialogParams);
}
}
调用这个OpenDialog的地方有:
// 需要强制更新游戏应用
GameEntry.UI.OpenDialog(new DialogParams
{
Mode = 2,
Title = GameEntry.Localization.GetString("ForceUpdate.Title"),
Message = GameEntry.Localization.GetString("ForceUpdate.Message"),
ConfirmText = GameEntry.Localization.GetString("ForceUpdate.UpdateButton"),
OnClickConfirm = GotoUpdateApp,
CancelText = GameEntry.Localization.GetString("ForceUpdate.QuitButton"),
OnClickCancel = delegate (object userData) { UnityGameFramework.Runtime.GameEntry.Shutdown(ShutdownType.Quit); },
});
GameEntry.UI.OpenDialog(new DialogParams
{
Mode = 2,
Title = GameEntry.Localization.GetString("UpdateResourceViaCarrierDataNetwork.Title"),
Message = GameEntry.Localization.GetString("UpdateResourceViaCarrierDataNetwork.Message"),
ConfirmText = GameEntry.Localization.GetString("UpdateResourceViaCarrierDataNetwork.UpdateButton"),
OnClickConfirm = StartUpdateResources,
CancelText = GameEntry.Localization.GetString("UpdateResourceViaCarrierDataNetwork.QuitButton"),
OnClickCancel = delegate (object userData) { UnityGameFramework.Runtime.GameEntry.Shutdown(ShutdownType.Quit); },
});
超棒!