在Unity中在GUI之上绘制3D游戏物体

3
我希望能够在我的项目中,将一个游戏对象以及GUI纹理绘制在其他组件的前面。我创建了第二个摄像机并设置了深度和层级,但它仍然没有起作用。我希望你能帮我找到错误或者我忘记的东西。
这是我的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 纹理。该纹理在预览屏幕中可见,但在运行时,MainScript 绘制的纹理却处于前景。
我还拍了两张相机对象的截图,请看这里: enter image description here enter image description here 我也可以提供整个项目给你。这只是一个基本的测试项目。
这是 Google Drive 中项目的链接:下载
2个回答

1

将camera2的深度设置为camera1.depth+1,将camera2的Clear Flags设置为depth only,将camera1的Clear Flags设置为skybox。在Camera2中取消勾选GUILayer,在Camera1中勾选GUILayer。就可以了...

enter image description here

enter image description here

enter image description here


首先非常感谢您的回复。现在根据您告诉我的设置,它已经在我的项目中运行了。 在我的情况下,我想要在我的C#脚本中绘制的GUITextures上方有3D对象。这也可能吗?我还卡在这里。否则我将使用您的解决方案,但是在事后实施将会很困难。 - mariusz_witeczek
我不知道你到底想要什么。不幸的是,我的版本比你的旧,而且我正在使用Mac,所以无法导入你的项目。 - sebastian s.

0
你不能在 GUI 元素前绘制 3D 对象,OnGUI 代码总是渲染在最上层。
为了实现这一点,你可以使用 渲染纹理(仅 Unity Pro 版本):在场景中有两个摄像机,将你的 3D 对象放置在其中一个摄像机中,将该摄像机渲染到纹理上,最后使用该纹理作为 GUI.DrawTexture() 的源。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接