在场景视图Unity3d中绘制GUI内容

时间:2013-11-13 15:26:58

标签: c# unity3d

无论如何在没有调用OnSceneGUI的情况下在场景视图上绘制东西?

或者有没有办法让OnSceneGUI被调用,即使没有选择附加脚本的对象?

编辑:看起来我对我要求的内容不够明确,所以这里有一点点更新:

我的游戏场景中有一大堆控件显示为GUI对象,游戏设计师使用它们来更轻松地测试游戏。由于这些工具是用于开发而不是部署,我想将它们移动到场景窗口。

不幸的是,如果选择包含带有“OnSceneGUI”方法的脚本的对象,我只能显示这些GUI工具。相反,我想让它们在游戏运行时显示,而不管选择的对象如何。

2 个答案:

答案 0 :(得分:2)

我找到了解决问题的方法。

如果您希望您的GUI内容始终显示在场景窗口中,您可以执行以下操作:

public class MyClass{
    static MyStaticConstructor() {
        SceneView.onSceneGUIDelegate += OnScene;
    }
    static void OnScene(SceneView sceneView) {
        // Draw GUI stuff here for Scene window display
    }
}

此代码将在您按下播放后立即运行,并将在场景窗口中绘制您想要的任何内容。

希望它会帮助别人!

答案 1 :(得分:1)

使用GUI有很多种方法, 最简单但效率最低的方法是在OnGUI()上使用GUI类

GUI.Label(new Rect(10,10,10,10), "This is a label");
GUI.Label(new Rect(10,10,10,10), "Your Texture2D here");

如果已定义,任何活动的monobehaviour都将运行OnGUI()。所以它可以附加到任何gameObject。您可以在场景中创建一个空的gameObject,并将其称为“GuiGameObject”,并将脚本附加到那里。这样它就不会与你的游戏剧本混合在一起。

还有GUI textures - >有关GUITexture

的更多信息

我还建议checking out nGUI

编辑: 对于OnSceneGUI您可以尝试使用Editor.Repaint,您可以使用它来确保检查器更新OnSceneGUI内部所做的更改