title | 消息框的标题。 |
message | 消息的文本。 |
ok | “确定”对话框按钮上显示的标签。 |
cancel | “取消”对话框按钮上显示的标签。 |
bool 如果用户单击“确定”按钮,则返回true
。否则返回false
。
此方法显示一个模态对话框。
在编辑器中显示消息框时使用它。ok
和 cancel
是要在对话框按钮上显示的标签。如果 cancel
为空(默认值),则仅显示一个按钮。如果按下 ok
按钮,则 DisplayDialog 返回 true
。
对于可能重复显示的对话框,请考虑使用此方法的重载,该重载采用 DialogOptOutDecisionType,如下面的代码示例中所述。
其他资源:EditorUtility.DisplayDialogComplex 函数。
显示有关要放置在表面上的对象数量的信息的对话框。
// Places the selected Objects on the surface of a terrain.
using UnityEngine; using UnityEditor;
public class PlaceSelectionOnSurface : ScriptableObject { [MenuItem("Example/Place Selection On Surface")] static void CreateWizard() { Transform[] transforms = Selection.GetTransforms(SelectionMode.Deep | SelectionMode.ExcludePrefab | SelectionMode.Editable);
if (transforms.Length > 0 && EditorUtility.DisplayDialog("Place Selection On Surface?", "Are you sure you want to place " + transforms.Length + " on the surface?", "Place", "Do Not Place")) { Undo.RecordObjects(transforms, "Place Selection On Surface"); foreach (Transform transform in transforms) { RaycastHit hit; if (Physics.Raycast(transform.position, -Vector3.up, out hit)) { transform.position = hit.point; Vector3 randomized = Random.onUnitSphere; randomized = new Vector3(randomized.x, 0F, randomized.z); transform.rotation = Quaternion.LookRotation(randomized, hit.normal); } } } } }
title | 消息框的标题。 |
message | 消息的文本。 |
ok | “确定”对话框按钮上显示的标签。 |
cancel | “取消”对话框按钮上显示的标签。 |
dialogOptOutDecisionType | 用户可以做出的退出决策类型。 |
dialogOptOutDecisionStorageKey | 用于存储决策的唯一键设置。 |
bool 如果用户单击ok
按钮或之前已选择退出,则返回true
。如果用户取消或关闭对话框而未做出决定,则返回false
。
此方法显示一个模态对话框,允许用户选择不再显示当前对话框。
使用此方法在编辑器中显示可能重复显示的对话框。根据您认为用户遇到此消息的频率以及您希望提醒他们的频率,选择要使用的 EditorUtility.DialogOptOutDecisionType。
如果用户选择退出查看与提供的 dialogOptOutDecisionStorageKey
关联的对话框,则 Unity 不会显示该对话框,并且此方法立即返回 true
。ok
和 cancel
是在对话框按钮上显示的标签。如果 cancel
为空,则按钮显示为“取消”。这是默认设置。如果用户按下 ok
按钮,则 DisplayDialog 返回 true
。
如果用户选择退出对话框,Unity 会存储此决定。如果 dialogOptOutDecisionType
设置为 DialogOptOutDecisionType.ForThisMachine,则 Unity 通过 EditorPrefs.SetBool 存储决定。如果 dialogOptOutDecisionType
设置为 DialogOptOutDecisionType.ForThisSession,则 Unity 通过 SessionState.SetBool 存储决定。在这两种情况下,Unity 都在作为 dialogOptOutDecisionStorageKey
提供的键下存储决定。
如果要让用户更改存储在 EditorPrefs 中的决定,您可以使用 SettingsProvider 将其添加到编辑器首选项中。
使用 DialogOptOutDecisionType.ForThisSession 在用户执行可能导致某些工作丢失的破坏性操作之前显示对话框。如果您认为用户可能会太频繁地看到此对话框,则可以使用 SettingsProvider 通过 EditorPrefs 添加一个选项到编辑器首选项中,并在显示对话框之前查询该设置。
其他资源:EditorUtility.DisplayDialogComplex 函数。
// Places the selected Objects on the surface of a terrain.
using UnityEngine; using UnityEditor; using UnityEngine.UIElements;
public class PlaceSelectionOnSurface : ScriptableObject { const string placeOnSurfaceDialogDecisionKey = "Example.PlaceOnSurfaceDecision"; [MenuItem("Example/Place Selection On Surface")] static void CreateWizard() { Transform[] transforms = Selection.GetTransforms(SelectionMode.Deep | SelectionMode.ExcludePrefab | SelectionMode.Editable);
if (transforms.Length > 0 && EditorUtility.DisplayDialog("Place Selection On Surface?", "Are you sure you want to place " + transforms.Length + " on the surface?", "Place", "Do Not Place", DialogOptOutDecisionType.ForThisMachine, placeOnSurfaceDialogDecisionKey)) { // Register and Undo event so that this action is not only not desctrutive but also easy to revert. // Without Undo, DialogOptOutDecisionType.ForThisSession would be a better fiting decision type. Undo.RecordObjects(transforms, "Place Selection On Surface"); foreach (Transform transform in transforms) { RaycastHit hit; if (Physics.Raycast(transform.position, -Vector3.up, out hit)) { transform.position = hit.point; Vector3 randomized = Random.onUnitSphere; randomized = new Vector3(randomized.x, 0F, randomized.z); transform.rotation = Quaternion.LookRotation(randomized, hit.normal); } } } } }