Unity Canvas的三种模式

一、简介:

Canvas的Render Mode一共有三种模式:Screen Space -OverLay、Screen Space-Camera、World Space

  1. Screen Space - Overlay(屏幕空间 - 覆盖): 这是最简单的 Canvas 渲染模式。UI 元素在这个模式下将渲染在屏幕上的最顶层,不受场景中其他物体的影响。UI 元素的位置是相对于屏幕的,而不是相对于世界空间的。这意味着即使场景中有相机移动或旋转,UI 元素也会始终保持在屏幕的固定位置。这种模式适用于大多数 2D 游戏和简单的用户界面。

  2. Screen Space - Camera(屏幕空间 - 相机): 在这种模式下,UI 元素仍然是渲染在屏幕上的,但是相对于一个指定的摄像机。UI 元素的位置将受到这个相机的视野和投影的影响。这意味着 UI 元素的位置是相对于摄像机的,而不是固定在屏幕上。这种模式适用于需要在 3D 场景中显示 UI 的情况,例如在游戏中显示玩家血条或交互提示。

  3. World Space(世界空间): 在这种模式下,UI 元素被视为场景中的普通对象,它们的位置是相对于世界空间的。UI 元素可以随着场景中的物体移动、旋转和缩放,并与场景中的其他对象进行交互。这种模式适用于需要将 UI 元素作为游戏中的物体进行交互的情况,例如在游戏世界中显示交互式地图或可拾取的物品。

 二、参数与例子:

1、Screen Space - Overlay(屏幕空间 - 覆盖)

参数:

当 RenderMode 为 Screen Space - Overlay时,Canvas的其它参数包括:

Pixel Perfect:UI元素精确到像素对齐,边缘更清晰,但是在UI调整和适配时会有更大的计算量。

Sort Order:Canvas 的深度。存在多个Canvas时,如果RenderMode 都为 Screen Space - Overlay时,Sort Order 值更大的Canvas会遮盖住 Sort Order 值小的 Canvas。

注:多个 Canvas 深度取值相等时,Hierarchy 视图中后面的 Canvas 显示在下,这一点与 UI 元素(如Image的规则相反)

Canvas 的 Screen Space - Overlay 模式是 Unity 引擎中一种常见的 UI 渲染模式,它将 UI 元素渲染在屏幕空间的最上层。在这种模式下,UI 元素的位置是相对于屏幕的而不是相对于世界空间的。

当你点击屏幕时,如果想要将某个 UI 元素移动到点击的位置。在这种情况下,你可以使用输入系统的 Input.mousePosition 属性来获取点击的屏幕位置。然后,为了将 UI 元素移动到点击的位置,需要将这个屏幕位置转换成 UI 元素的本地坐标系。

在屏幕空间中,屏幕的中心点是 (0, 0),x 轴的范围是从屏幕的左边到右边,y 轴的范围是从屏幕的底部到顶部。但是,UI 元素的坐标是相对于 Canvas 的,Canvas 的中心点也是 (0, 0)。因此,为了将屏幕坐标转换成 Canvas 上的坐标,需要做一些调整。

通常情况下,会将鼠标点击位置的屏幕坐标减去屏幕宽度的一半,以使屏幕的中心对齐到 Canvas 的中心。这样会使屏幕坐标系的原点移动到 Canvas 的中心,使得点击位置的原点为 Canvas 的中心。同样,也需要将屏幕坐标的 y 值减去屏幕高度的一半,以保持坐标系的对称性。
代码示例:

using System;
using UnityEngine;

public class MoveToClickPoint : MonoBehaviour
{
    GUIStyle labelStyle;
    Vector3 screenPosition = new Vector3(Screen.width/2, Screen.height/2, 0);
    private float moveSpeed = 50f; // 主角移动速度
    private Vector3 targetPosition; // 目标位置
    private bool isMoving = false; // 是否正在移动
    void Update()
    {
        
        // 如果点击了屏幕,并且没有正在移动,则设置目标位置为点击点,并开始移动
        if (Input.GetMouseButtonDown(0) && !isMoving)
        {
            SetTargetPosition();
            isMoving = true;
        }

        // 如果正在移动,则朝目标位置移动
        if (isMoving)
        {
            MovePlayer();
        }
    }
    // 设置目标位置为点击点
    void SetTargetPosition()
    {
        // 鼠标左键点击,点击位置是屏幕坐标,坐标起点在左下角,所以UI的实际坐标要分别减去屏幕坐标的高度,和宽度的一半
        targetPosition = Input.mousePosition - screenPosition;
    }
    
    // 主角朝目标位置移动
    void MovePlayer()
    {
        transform.localPosition = Vector3.MoveTowards(transform.localPosition, targetPosition, moveSpeed * Time.deltaTime); // 角色向前移动到点击位置(与clickPosition在同一平面,transform)
        // 如果到达目标位置,则停止移动
        if (transform.localPosition == targetPosition)
        {
            isMoving = false;
        }
    }
    


    private void Awake()
    {
        labelStyle = new GUIStyle();
        labelStyle.fontSize = 50;
    }

    private void OnGUI()
    {
        GUI.Label(new Rect(10, 10, 200, 50), "屏幕坐标:" + Input.mousePosition,labelStyle);
        GUI.Label(new Rect(10, 70, 200, 50), "UI坐标:" + (Input.mousePosition - screenPosition));
    }
}
2、Screen Space - Camera(屏幕空间 - 相机)

Screen Space - Camera:与Screen Space - Overlay相同的是,两种模式都是屏幕空间的渲染模式,不同的是,Screen Space - CameraUI 元素的位置​​​​​虽不直接受到场景中其他物体的影响,但受到指定摄像机的视野和投影的影响。如果场景中的物体移动或旋转,UI 元素相对这些物体的相对位置可能会发生变化,但它们仍然相对于指定摄像机进行渲染,可以说相对相机是不变的,也就是说在屏幕中的位置是不变的,所以适用于3D游戏中的2D的UI。看一个效果:
未完待续...

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/485469.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Oracle参数文件详解

1、参数文件的作用 参数文件用于存放实例所需要的初始化参数,因为多数初始化参数都具有默认值,所以参数文件实际存放了非默认的初始化参数。 2、参数文件类型 1)服务端参数文件,又称为 spfile 二进制的文件,命名规则…

PostgreSQL11 | Windows系统安装PostgreSQL

本教程选取与参考书籍《PostgreSql11 从入门到精通》(清华大学出版社)的11大版本最新小版本11.22的安装作为教程案例 下载 下载PostgreSQL installer 下载到本地 安装 运行安装引导器 中国地区语言选项(暂时) Chinese(Simplifie…

2024牛客寒假算法基础集训营4补题

E:贪心数据结构 首先,我们看一个例子: 114514,令k3,我们从左开始,1,1,4,此时为3的倍数,那么我们就截断。 因为若我们在此截断,后面的5会对以后的数产生有利…

SSM | SSM框架整合

目录: 一、整合环境搭建整合思路准备所需JAR包编写配置文件 二、整合应用测试 作者简介 :一只大皮卡丘,计算机专业学生,正在努力学习、努力敲代码中! 让我们一起继续努力学习! 该文章参考学习教材为: 《Java EE企业级应…

Qt——2D画图

基础画图函数 矩形 painter.drawRect(50,50,200,100); 圆角矩形 painter.drawRoundRect(50,50,200,200,50,50); xRadius和yRadius分别以矩形宽度和高度的一半的百分比指定,并且应该在0.0到100.0的范围内 弧线 painter.drawArc(50,50,200,200, -90*16, 90*16);…

基于nodejs+vue学生作业管理系统python-flask-django-php

他们不仅希望页面简单大方,还希望操作方便,可以快速锁定他们需要的线上管理方式。基于这种情况,我们需要这样一个界面简单大方、功能齐全的系统来解决用户问题,满足用户需求。 课题主要分为三大模块:即管理员模块和学生…

[AutoSar]BSW_ECUC模块配置

目录 关键词平台说明一、背景二、EcucGeneral2.1 BswInitialization 三、EcucHardware四、EcucPduCollection五、EcucPartitionCollection 关键词 嵌入式、C语言、autosar、OS、BSW 平台说明 项目ValueOSautosar OSautosar厂商vector , EB芯片厂商TI 英飞凌编程语…

三星解释其 108MP Nonacell 传感器中的 PDAF 像素遮蔽

Electronic Imaging 发表了三星论文“采用 Nonacell 和 Super PD 的 CMOS 图像传感器的新型 PDAF 校正方法,以提高合并模式下的图像质量”,作者为 Yeongheup Jang、Hyungwook Kim、Kundong Kim、Sungsu Kim、Sungyong Lee 和 Joonseo Yim。 本文提出了一种新的 PDAF 校正方法…

【stable diffusion扩散模型】一篇文章讲透

目录 一、引言 二、Stable Diffusion的基本原理 1 扩散模型 2 Stable Diffusion模型架构 3 训练过程与算法细节 三、Stable Diffusion的应用领域 1 图像生成与艺术创作 2 图像补全与修复 3 其他领域 四、Stable Diffusion的优势与挑战 👉优势 &#x1f…

【云开发笔记No.9】Kanban与敏捷开发

Kanban看板起源于丰田。 看板(Kanban)一词来自日文,本义是可视化卡片。如下图所示,看板工具的实质是:后道工序在需要时,通过看板向前道工序发出信号——请给我需要数量的输入,前道工序只有得到看…

OpenHarmony IDL工具规格及使用说明书(仅对系统应用开放)

IDL接口描述语言简介 当客户端和服务器进行IPC通信时,需要定义双方都认可的接口,以保障双方可以成功通信,OpenHarmony IDL(OpenHarmony Interface Definition Language)则是一种定义此类接口的工具。OpenHarmony IDL先…

SpringBoot 文件上传(三)

之前讲解了如何接收文件以及如何保存到服务端的本地磁盘中: SpringBoot 文件上传(一)-CSDN博客 SpringBoot 文件上传(二)-CSDN博客 这节讲解如何利用阿里云提供的OSS(Object Storage Service)对象存储服务保存文件。…

Linux升级GCC

文章目录 一、安装 EPEL 仓库二、更新yum三、安装 CentOS 开发工具组四、安装scl五、安装gcc 11六、启用gcc 11七、设置永久使用 一、安装 EPEL 仓库 命令: yum install epel-release -y二、更新yum 命令: yum update -y三、安装 CentOS 开发工具组 …

Unity 背包系统中拖拽物体到指定位置或互换位置效果的实现

在Unity中,背包系统是一种常见的游戏系统,可以用于管理和展示玩家所持有的物品、道具或装备。 其中的拖拽功能非常有意思,具体功能就是玩家可以通过拖拽物品图标来移动物品在背包中的位置,或者将物品拖拽到其他位置或界面中&…

【数据结构和算法初阶(C语言)】二叉树的链式结构--前、中、后序遍历实现详解,节点数目计算及oj题目详解---二叉树学习日记③

1.二叉树的链式存储 二叉树的链式存储结构是指,用链表来表示一棵二叉树,即用链来指示元素的逻辑关系。 通常的方法是 链表中每个结点由三个域组成,数据域和左右指针域,左右指针分别用来给出该结点左孩子和右孩子所 在的链结点的存…

20240319-图论

图论练习题目 拓扑排序深度优先搜索方法广度优先搜索方法 无向无权图无向有权图有向无权图 利用广度优先搜索算法有向有权图 带排序的广度优先算法/dijkstra最小生成树prims算法Kruskals Algorithm 最小割 min-cut二分图 Bipartite Graph 队列例题1 所有可能的路径例题2 岛屿数…

Redis 教程系列之Redis 集群配置(十三)

1.Redis集群方案比较 主从模式 在软件的架构中,主从模式(Master-Slave)是使用较多的一种架构。主(Master)和从(Slave)分别部署在不同的服务器上,当主节点服务器写入数据时,同时也会将数据同步至从节点服务器,通常情况下,主节点负责写入数据,而从节点负责读取数据。…

【计算机网络_网络层】IP协议

文章目录 1. IP的基本概念1.1 什么是IP协议1.2 为什么要有IP协议 2. IP的协议格式3. 网段划分(重要)3.1 为什么要进行网段划分3.2 网段划分的规则3.2.1 古老的划分方案3.2.2 现代的划分方案 4. 特殊的IP地址5. 解决IP地址的数量限制问题6. 私有IP和公网I…

RecyclerView notifyItemRemoved 之后的源码分析

源码版本:androidx1.3.2 分析场景: RecyclerView使用线性布局,方向为竖直方向,布局从上到下,宽高都是 MATCH_PARENT。开始有3条数据。然后移除 position 1 的数据。 流程图 先说下结论: 在 dispatchL…

24. UE5 RPG制作属性面板(二)

在上一篇中,我们创建属性面板的大部分样式,这一篇里面接着制作。 在这一篇里我们需要有以下几个方面: 在界面增加一个属性按钮。属性按钮增加事件,点击时可以打开属性面板,属性面板打开时无法再次点击按钮。点击属性面…