将2d和3d元素组合使用至gui中

本文解释了如何在Unity3D游戏引擎中创建包含2D和3D元素的GUI。通过调整摄像机设置和使用特定的脚本,可以实现3D元素与2D背景的融合。文章还提供了详细步骤和代码示例。

将2d和3d元素组合使用至gui中

u1 的头像

 This post explains how to create a GUI on the Unity3D game engine that has both 2D and 3D elements in it. Some may say that is just a matter of setting up a new camera with a dedicated culling mask just to render the 3D elements on the GUI. While this is partially true, adding a 2D image using a script with GUI function calls will cause the 3D image to be covered by the 2D image. That’s why this post will focus on how to set a GUI that has a 3D element with a 2D background.

Before setting up any additional camera, it is necessary to place the 3D model we want to display in the GUI at a place the player cannot reach. A good candidate is below the terrain. So, after placing the 3D model at such position, select this object, and, in its inspector, click on the Layer dropdown menu, then select Add Layer. Choose an empty layer slot and type “3D GUI” in it. Select the same object again and set its layer to the3D GUI layer:

Creating the 3D layer Image.

After creating the layer, add the 3D model to it.

The next step is to select the main camera at the Hierarchy tab, and set it’sCulling Mask to every layer except the 3D GUI layer:

Setting the main camera culling mask image

Unmark the '3D GUI' layer.

Take note of the Depth property value. You are going to need to remember it in the following step. Now, it’s time to create the dedicated camera that will render only the 3D GUI elements. Create a new camera by going toGameObject -> Create Other -> Camera. After it appears on theHierarchy tab, give it the name of “3DGUICamera“. Place the camera in such manner that it renders the 3D model that you want to appear on the GUI. Delete all of the three standard components that already comes attached to the camera: the Audio Listener, Flare Layer and the GUI Layer. Still in this camera’sInspector, adjust the following settings:

  • Change the Projection to Orthographic (leave as Perspective if the depth of the 3D models in the GUI matter).
  • Set the Size of the projection to 1.
  • If possible, reduce the value of the Far clipping plane distance.
  • Set the Depth to a value greater than the one from the Main Camera.
  • At the Normalized View Port Rect parameter, set both W and H values between 0,1 and 0,3. It depends on how large you want the 3D model to appear on the GUI.
  • Change the X and Y to position the 3D GUI model on the screen.
  • Set the Clear Flags to Depth Only.

Here’s a image of this camera’s Inspector tab, after all settings have been changed:

3D Camera Settings Image.

The arrows indicate which values have to be changed.

You should see the 3D model in the screen at this point. Now that you already have both cameras set up, it’s time to add the 2D elements to the 3D GUI. Let’s say that we wanted to add a 2D background, like a container for the 3D object. Normally, we would write a script to add this element, although, in this case, it wouldn’t work, since everything that is inside aOnGUI() method call clears the camera, whatever its depth.

The only way to add a 2D background to the 3D model is with a GUI Texture game object. Before creating it, import a image file you want to use as the background. Then, in theProject tab, set the Texture Type to GUI and hit apply:

Importing the 2D Background Image

Set the 'Texture Type' to 'GUI' and click on 'Apply'.

In this step, we are going to create a GUI Texture game object by going toGameObject -> Create Other -> GUI Texture. Click on this recently created object in theHierarchy tab and name it “Background“. Place it as a child of the3DGUICamera object. Now, at the Inspector, expand the Pixel Inset menu and set the texture to be the recently added image file and change theWidth and Height values to match the ones from the image. Than set theX and Y values to place the background image behind the 3D model, like this:

Positioning the 2D background  Image

Change these values to position the 2D background behind the 3D model. Don't forget to insert the Width and Height values.

The last thing to do is to add the GUI Texture game object as a child of the3DGUICamera. And that’s it for the 2D background. To add an image in front of the 3D model, just create a GUI script like usual (creating a script and adding code to theOnGUI() method) and attach it to the Main Camera. This will make the image to be rendered on top of the 3D model, as explained, it works because theOnGUI() method call clears the screen, whatever the camera depth is.

For this project, I’m using a simple GUI script that displays the number of collected boxes:

public class ItemCounter: MonoBehaviour

{

void OnGUI()

{

//draw text using black color

GUI.color = Color.black;

//Display the number of collected items

GUI.Label(new Rect(87,548,258,89),"X   "+Item.numberOfItems.ToString());

}

}

As promised on the beginning of the post, here’s a Unity3D project with a scene that has everything set up and the source code of the GUI, both inC# and JavaScript. Remember to run this project at the Standalone resolution (800×600), because the GUI elements don’t resize according to the screen resolution (explaining how to do it goes beyond the scope of this post)


From:  http://www.unity3d8.com/content/%E5%B0%862d%E5%92%8C3d%E5%85%83%E7%B4%A0%E7%BB%84%E5%90%88%E4%BD%BF%E7%94%A8%E8%87%B3gui%E4%B8%AD


评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值