【Unity100个实用小技巧】世界Canvas自动隐藏,包含子物体

news/2024/11/30 7:47:51/

  • ☀️博客主页:CSDN博客主页
  • 💨本文由 萌萌的小木屋 原创,首发于 CSDN💢
  • 🔥学习专栏推荐:面试汇总
  • ❗️游戏框架专栏推荐:游戏实用框架专栏
  • ⛅️点赞 👍 收藏 ⭐留言 📝,如有错误请指正
  • 📆 未来很长,值得我们全力奔赴更美好的生活✨

  • ------------------❤️分割线❤️-------------------------

请添加图片描述请添加图片描述请添加图片描述

Unity 小科普

老规矩,先介绍一下Unity的科普小知识:

  •  Unity 是行业领先的实时3D开发平台。
  • 包括游戏开发,电影,AR/VR,虚拟现实在内的所有创作者,可以将梦想照进现实。
  • Unity提供了一套完整完善的软件解决方案,可用于创作,运营和模拟任何2D和3D的内容,进本全平台支持
  • 实际上Unity就是一个游戏引擎,大名鼎鼎的原神就是用它制作的。

Unity100个实用小技巧

需求:世界模式Canvas自动隐藏,包含所有的子UI控件

using UnityEngine;public class AutoHide : MonoBehaviour
{public float alphaSpeed = 1f;          //渐隐渐显的速度private float m_UIAlpha = 1;             //初始化时让UI显示private CanvasGroup m_CanvasGroup;// Use this for initializationvoid Start(){m_CanvasGroup = this.GetComponent<CanvasGroup>();}// Update is called once per framevoid Update(){if (m_CanvasGroup == null) return;if (m_UIAlpha != m_CanvasGroup.alpha){m_CanvasGroup.alpha = Mathf.Lerp(m_CanvasGroup.alpha, m_UIAlpha, alphaSpeed * Time.deltaTime);GetComponent<MainScenePanel>().SetAllSceneModelAlpha(m_CanvasGroup.alpha);if (Mathf.Abs(m_UIAlpha - m_CanvasGroup.alpha) <= 0.01f){m_CanvasGroup.alpha = m_UIAlpha;}}}/// <summary>/// 显示/// </summary>public void UIFadeInEvent(){m_UIAlpha = 1;if (m_CanvasGroup != null){m_CanvasGroup.blocksRaycasts = true;      //可以和该对象交互}}/// <summary>/// 隐藏/// </summary>public void UIFadeOutEvent(){m_UIAlpha = 0;if (m_CanvasGroup != null){m_CanvasGroup.blocksRaycasts = false;     //不可以和该对象交互}}
}

原理:通过修改CanvasGroup.alpha实现

CanvasGroup

一种可放置 Canvas 的元素,可用于修改子 Alpha、Raycasting、Enabled 状态。

画布组可用于修改子元素的状态。

参数:

Alpha : 该组UI元素的透明度。注:每个UI最终的透明度是由此值和自身的alpha数值相乘得到。

Interactable : 是否需要交互(勾选的则是可交互),同时作用于该组全部UI元素。

Blcok Raycasts : 是否可以接收图形射线的检测(勾选则接受检测)。注:不适用于Physics.Raycast.。

Ignore Parent Group : 是否需要忽略父级对象中的CanvasGroup的设置。(勾选则忽略)
应用场景:

  1. 在窗口的GameObject上添加一个CanvasGroup,通过控制它的Alpha值来淡入淡出整个窗口;
  2.   通过给父级GameObject上添加一个CanvasGroup并设置它的Interactable值为false来设置一套没有交互(灰色)的控制;
  3. 通过将元素或元素的一个父级添加Canvas Group并设置BlockRaycasts值为false来制作一个或多个不阻止鼠标事件的UI元素;

CanvasGroup的Alpha与SetActive()方法比较:

  1. CanvasGroup的Alpha与SetActive()两者之间的性能区别不大。
  2. CanvasGroup的Alpha由0设为1的时候,并不会让自己活着的子节点中脚本执行Awake()方法,而SetActive(true)则会执行Awake()方法。
  3. CanvasGroup的Alpha设为0和SetActive(false)的时候,同样不会调用drawcall;

参考链接

官方说明



http://www.ppmy.cn/news/95893.html

相关文章

2023 剑桥大学博士后/访问学者项目一览

作为全球知名的高等教育机构&#xff0c;剑桥大学一直致力于与世界各地的学者保持紧密联系&#xff0c;共同探索各个学科领域的前沿问题和挑战。为了加强国际间的学术交流和合作&#xff0c;剑桥大学开展了博士后访问学者项目&#xff0c;为来自不同国家和地区的优秀学者提供机…

倒置字符串、猜名次、猜凶手、杨辉三角

目录 例一&#xff1a;倒置字符串 例二&#xff1a;猜名次 例三&#xff1a;猜凶手 例四&#xff1a;杨辉三角 方法一 方法二 例一&#xff1a;倒置字符串 首先我们先来看一下题目具体要求 再来看一下我们所需要的效果 这里呢&#xff0c;博主给出两种思路&#xff0c;…

前端面试-React专题

目录 一.React1. React 的主要特性是什么2.React 的核心思想是3. 什么是jsx4. render()函数5. 函数组件和类组件的区别6. HTML和React中事件处理的区别7. React 中的合成事件8. 虚拟Dom&#xff1f;为什么使用&#xff1f;如何实现&#xff1f;9. 在 constructor 中给 super 函…

基于html+css的图展示94

准备项目 项目开发工具 Visual Studio Code 1.44.2 版本: 1.44.2 提交: ff915844119ce9485abfe8aa9076ec76b5300ddd 日期: 2020-04-16T16:36:23.138Z Electron: 7.1.11 Chrome: 78.0.3904.130 Node.js: 12.8.1 V8: 7.8.279.23-electron.0 OS: Windows_NT x64 10.0.19044 项目…

单片机原理及应用——持续更新

目录 一、单片机概述 1、单片机简介 2、单片机的特点 3、MSC-51系列与AT89S5x系列单片机 &#xff08;1&#xff09;MSC-51系列单片机 &#xff08;2&#xff09;AT89S5x系列单片机 二、AT89S52单片机的片内硬件结构 1、AT89S52单片机的硬件组成 2、AT89S52单片机的引…

【Netty】自定义解码器、编码器、编解码器(十五)

文章目录 前言一、自定义基于换行的解码器1.1 LineBasedFrameDecoder 类1.2 定义解码器1.3 定义 ChannelHandler1.4 定义 ChannelInitializer1.5 编写服务器1.6 编写客户端1.7 测试 二、自定义编码器2.1 定义消息通信协议2.2 定义编码器2.3 定义解码器2.4 定义服务器 ChannelHa…

Vue后台管理系统【附源码】

登录 – 完成 路由拦截 – 完成 商品管理&#xff08;增加、编辑、搜索、删除&#xff09; – 完成 角色管理&#xff08;增加、编辑、搜索、删除、权限管理&#xff09; – 完成 交易订单&#xff08;增加、编辑、搜索、删除&#xff09; – 完成 用户管理&#xff08;增加、编…

happens-before 和 as-if-serial 对比

happens-before 和 as-if-serial 对比 as-if-serial语义happens-before规则as-if-serial语义保证单线程内程序的执行结果不被改变happens-before关系保证正确同步的多线程程序的执行结果不被改变as-if-serial语义给编写单线程程序的程序员创造了一个幻境&#xff1a;单线程程…