【Unity】UI、背景和3D的Camera和Canvas设置

目前存在需求

背景是指定的图片,该图片始终显示在页面中,不会因场景的视角操控发生尺寸等变化;

UI内容显示在页面最上层,同样不会因场景的视角操控发生尺寸等变化,但是当软件整个尺寸发生变化时,会跟随变化,UI内容会覆盖3D物体;

3D物体可以随着相机视角的变化而变近变远等,3D物体上可能存在UI卡片等。

需求分析

背景在最底层,3D物体在中间层,UI在最顶层。

因此背景和UI不能公用一个Canvas,3D物体也需要一个Canvas;

3D物体根据相机视角改变远近等,背景和UI不变,那么3D物体使用单独的相机,背景和UI使用对应的UI相机。

成果展示

请添加图片描述
查看相机视角控制方法

场景部分组成

在这里插入图片描述
三个相机的展示内容:三个相机的内容互不干扰。
主相机
在这里插入图片描述
背景相机
在这里插入图片描述
UI相机
在这里插入图片描述

参数设置

需要建立Sorting layer如下:
在这里插入图片描述

将对应的物体设置为对应的层级。
在这里插入图片描述
在这里插入图片描述

背景的相机和Canvas设置如下
需要将背景相机拖拽到背景CanvasRenderCamera
注意:Sorting Layerorder in Layer参数的选择
在这里插入图片描述
注意Depth参数的设置
在这里插入图片描述

UI的相机和Canvas设置如下
在这里插入图片描述
在这里插入图片描述

主相机的设置如下
在这里插入图片描述

3D物体的Canvas设置如下
在这里插入图片描述

一些参数的说明

Canvas组件

mode:

  • space-overlay(屏幕空间-全局) 展示场景中的方形区域,内部的所有UI元素可见,非常吃性能

  • space-Camera 允许指定一个镜头,让系统渲染镜头内的元素

Canvas Scaler组件

UI scale Mode

  • Constant Pixel Size (保持像素大小) UI可以无视屏幕大小,保持像素的大小

  • scale with screen size (随屏幕大小缩放) 根据屏幕大小适应
    ​ - reference Resolution UI主分辨率 X1280 Y720 (桌面端)
    - Match height:1 只有高度改变时 UI元素才会随之改变

  • constant physical size(保持实体大小) 无视屏幕和分辨率大小 保持UI大小

UICamera的设置

Clear Flags : Depth only 清除镜头的深度信息

projection(投影类型) :Orthographic(正交) 2D场景

您好! 在Unity中创建3D物体并在UI上拖拽出它可以通过以下步骤实现: 1. 创建一个3D物体,并将其命名为"3DObject"。 2. 在Hierarchy面板中选择"3DObject",然后在Inspector面板中将"Tag"设置为"Draggable"。 3. 在Hierarchy面板中创建一个UI > Button游戏对象,并将其命名为"DraggableButton"。 4. 在Project面板中创建一个新的C#脚本,并将其命名为"DraggableObject"。 5. 将"DraggableObject"脚本拖放到"3DObject"游戏对象上。 6. 在"DraggableObject"脚本中,添加以下代码: ``` using System.Collections; using System.Collections.Generic; using UnityEngine; using UnityEngine.EventSystems; public class DraggableObject : MonoBehaviour, IBeginDragHandler, IDragHandler, IEndDragHandler { public Transform parentToReturnTo = null; public Transform placeholderParent = null; GameObject placeholder = null; public void OnBeginDrag(PointerEventData eventData) { placeholder = new GameObject(); placeholder.transform.SetParent( this.transform.parent ); LayoutElement le = placeholder.AddComponent<LayoutElement>(); le.preferredWidth = this.GetComponent<LayoutElement>().preferredWidth; le.preferredHeight = this.GetComponent<LayoutElement>().preferredHeight; le.flexibleWidth = 0; le.flexibleHeight = 0; placeholder.transform.SetSiblingIndex( this.transform.GetSiblingIndex() ); parentToReturnTo = this.transform.parent; placeholderParent = parentToReturnTo; this.transform.SetParent( this.transform.parent.parent ); GetComponent<CanvasGroup>().blocksRaycasts = false; } public void OnDrag(PointerEventData eventData) { this.transform.position = eventData.position; if(placeholder.transform.parent != placeholderParent) placeholder.transform.SetParent(placeholderParent); int newSiblingIndex = placeholderParent.childCount; for(int i=0; i < placeholderParent.childCount; i++) { if(this.transform.position.x < placeholderParent.GetChild(i).position.x) {
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值