在Unity中的GUI上方绘制3D GameObject

时间:2014-01-20 13:30:27

标签: c# unity3d

我想在项目和GUI Textures中的所有其他组件前面绘制一个GameObject。

我创建了第二个摄像头并设置了深度和图层,但它仍然不起作用。我希望你能帮助我找到错误或我忘记的事情。

这是我的MainScript绘制一个简单的纹理:

using UnityEngine;
using System.Collections;

public class MainScript : MonoBehaviour
{
Texture2D texture;

// Use this for initialization
void Start()
{
    texture = new Texture2D(Screen.width, Screen.height);

    for (int y = 0; y < texture.height; y++)
    {
        for (int x = 0; x < texture.width; x++)
        {
            texture.SetPixel(x, y, Color.blue);
        }
    }
    texture.Apply();
}

void OnGUI()
{
    GUI.DrawTexture(new Rect(0, 0, texture.width, texture.height), texture);
}
}

我还创建了两个摄像头和一个显示GUI纹理的GameObject。纹理在预览屏幕中可见,但在运行时,在MainScript中绘制的纹理是预设的。

我制作了两个我的相机对象截图。见这里:

enter image description here

enter image description here

我也可以为您提供整个项目。这只是一个基本的测试项目。

以下是Google云端硬盘中项目的链接:Download

2 个答案:

答案 0 :(得分:1)

将camera2的深度设置为camera1.depth + 1,将camera2的Clear Flags设置为仅深度,将camera1的Clear Flags设置为skybox。取消选中Camera2处的GUILayer并检查camera1中的GUILayer。应该这样做......

enter image description here

enter image description here

enter image description here

答案 1 :(得分:0)

您无法在GUI元素前面绘制3D对象,OnGUI代码始终呈现在所有内容之上。

要实现此目的,您可以使用Render Textures(仅限Unity Pro):在场景中安装两个摄像头,将3D对象放在一个摄像头中,将此摄像头渲染为纹理,最后使用该纹理作为源一个GUI.DrawTexture()