版本:Unity 6 (6000.0)
语言English
  • C#

EditorUtility.DisplayDialog

建议更改

成功!

感谢您帮助我们提高 Unity 文档的质量。虽然我们无法接受所有提交,但我们确实阅读了用户提出的每个更改建议,并在适用时进行更新。

关闭

提交失败

由于某些原因,您的更改建议无法提交。请<a>稍后再试</a>。感谢您抽出时间帮助我们提高 Unity 文档的质量。

关闭

取消

声明

public static bool DisplayDialog(string title, string message, string ok, string cancel = "");

参数

title 消息框的标题。
message 消息的文本。
ok “确定”对话框按钮上显示的标签。
cancel “取消”对话框按钮上显示的标签。

返回值

bool 如果用户单击“确定”按钮,则返回true。否则返回false

描述

此方法显示一个模态对话框。

在编辑器中显示消息框时使用它。

okcancel 是要在对话框按钮上显示的标签。如果 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); } } } } }

声明

public static bool DisplayDialog(string title, string message, string ok, DialogOptOutDecisionType dialogOptOutDecisionType, string dialogOptOutDecisionStorageKey);

声明

public static bool DisplayDialog(string title, string message, string ok, string cancel = "", DialogOptOutDecisionType dialogOptOutDecisionType, string dialogOptOutDecisionStorageKey);

参数

title 消息框的标题。
message 消息的文本。
ok “确定”对话框按钮上显示的标签。
cancel “取消”对话框按钮上显示的标签。
dialogOptOutDecisionType 用户可以做出的退出决策类型。
dialogOptOutDecisionStorageKey 用于存储决策的唯一键设置。

返回值

bool 如果用户单击ok按钮或之前已选择退出,则返回true。如果用户取消或关闭对话框而未做出决定,则返回false

描述

此方法显示一个模态对话框,允许用户选择不再显示当前对话框。

使用此方法在编辑器中显示可能重复显示的对话框。根据您认为用户遇到此消息的频率以及您希望提醒他们的频率,选择要使用的 EditorUtility.DialogOptOutDecisionType。

如果用户选择退出查看与提供的 dialogOptOutDecisionStorageKey 关联的对话框,则 Unity 不会显示该对话框,并且此方法立即返回 true

okcancel 是在对话框按钮上显示的标签。如果 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); } } } } }