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); },
});
超棒!
这篇博客介绍了游戏UI框架中DialogForm类的设计与实现,它在创建时可以配置对话模式、是否暂停游戏以及三种点击事件委托。在打开Dialog时,会根据配置执行相应的回调函数。此外,还展示了如何通过UIExtension的OpenUIForm和OpenDialog函数来创建和显示Dialog。这些功能在游戏更新提示、资源更新等场景中有着广泛应用。
1061

被折叠的 条评论
为什么被折叠?



