UI页面切换按钮随页面切换缩放

2023-11-18

选中按钮放大其余按钮缩小的
效果:

在这里插入图片描述在这里插入图片描述
在这里插入图片描述

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class BottomBarBtn : MonoBehaviour
{
    public RectTransform rect;
    public GameObject[] active;
    public Transform icon;
    float maxWidth = 360f;
    float minWidth = 180f;
    float maxScale = 1.5f;

    Coroutine closing;
    Coroutine expanding;
    bool isClose;
    public bool isPlaying;
    float width
    {
        get
        {
            return rect.sizeDelta.x;
        }
        set
        {
            Vector2 size = rect.sizeDelta;
            size.x = value;
            rect.sizeDelta = size;
        }
    }
    

    public void SetOpen(bool open)
    {
        isPlaying = false;
        float to = open ? maxWidth : minWidth;
        Vector3 toScale = !open ? Vector3.one : Vector3.one * maxScale;
        width = to;
        isClose = !open;
        icon.transform.localScale = toScale;
        SetActiveImg(open);
    }

    public void OpenBtn()
    {
        if (closing != null)
        {
            isPlaying = false;
            StopCoroutine(closing);
            closing = null;
        }
        if (expanding != null || !isClose) return;
        expanding = StartCoroutine(ExpandBtn(true));
        SetActiveImg(true);
    }


    public void CloseBtn()
    {

        if (expanding != null)
        {
            isPlaying = false;
            StopCoroutine(expanding);
            expanding = null;
        }
        if (closing != null || isClose) return;
        expanding = StartCoroutine(ExpandBtn(false));
        SetActiveImg(false);
    }

    void SetActiveImg(bool boolean)
    {
        foreach (GameObject obj in active)
        {
            obj.gameObject.SetActive(boolean);
        }
    }

    IEnumerator ExpandBtn(bool toBig)
    {
        float timer = 0;
        float time = 0.2f;
        isPlaying = true;
        float to = !toBig ? minWidth : maxWidth;
        Vector3 toScale = Vector3.one * (toBig ? maxScale : 1);
        float wFrom = width;
        Vector3 fromScale = icon.transform.localScale;
        while (timer < time)
        {
            width = rect.sizeDelta.x;
            timer += Time.deltaTime;
            float t = timer / time;
            float wCur = Mathf.Lerp(width, to, t);
            Vector3 curScale = Vector3.Lerp(fromScale, toScale, t);

            icon.transform.localScale = curScale;
            width = wCur;
            yield return null;
        }
        isPlaying = false;
        closing = null;
        expanding = null;
        width = to;
        isClose = !toBig;
        icon.transform.localScale = toScale;
    }
}

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

UI页面切换按钮随页面切换缩放 的相关文章

  • 一些个人常用的网站网址

    一些个人常用的网站网址 GitHub https github com Gitee https gitee com 1 书栈网 https www bookstack cn explore cid 27 tab popular 2 Unit
  • 游戏开发unity编辑器扩展知识系列:修改纹理资源的TextureType

    需要用TextureImporter导入资源 调用如下代码 TextureImporter importer TextureImporter TextureImporter GetAtPath path importer textureTy
  • 【Unity Shader】屏幕后处理1.0:调整亮度/饱和度/对比度

    1 Unity中实现屏幕特效的基本步骤 什么叫屏幕后处理 Screen post processing effects 渲染完整个场景得到屏幕图像后对图像进行一系列操作 实现各种屏幕特效 这一步我们可以添加很多例如景深 Depth of F
  • Unity3d Terrain地形制作系列(一)

    游戏简单地形 地形制作 地形制作 第一步在场景里加载一个地形对象 第二步 我们在属性面板里找到绘制地形 然后选择Set Height 绘制高度 应该我们要制作低凹的效果 所有先让他有个高度 不然是不能实现低凹的效果 如图 我们然后选择绘制地
  • 【UGUI】2D头顶血条制作

    前言 近期因为需要制作玩家和敌人头顶的2D血条 查找了很多博客 发现很多都拘束于Canvas的渲染模式必须要设定为ScreenSpace Overlay 还有应该是版本原因 我的是unity2019 1 11f1 用RecttTransfo
  • UE5学习笔记(一)——界面功能梳理&第一天知识点记录

    学习UE5的第一步 是软件安装 默认是安装好的 由于安装没有太多技术含量 所以就没有专门做记录 这里有个注意点 虚幻引擎是整合在Epic games launcher中的 也就是说开发引擎内嵌在游戏平台上 打个比方 就是如果你要下unity
  • Unity中级客户端开发工程师的进阶之路

    上期UWA技能成长系统之 Unity高级客户端开发工程师的进阶之路 得到了很多Unity开发者的肯定 通过系统的学习 可以掌握游戏性能瓶颈定位的方法和常见的CPU GPU 内存相关的性能优化方法 UWA技能成长系统是UWA根据学员的职业发展
  • Unity 粒子特效、材质发光 HDR ShaderGraph图文教程[完成lit发光设置]

    效果如图 准备工作 在hdr模式下 关闭Directional Light 相机设置 移动球挂一个点光源作为子节点 设置自行调节 0 创建移动球的材质及shader shader gt 在Project Create Shader Grap
  • Unity-AR 简介

    Unity AR 简介 现有Unity AR Sdk ARKit 苹果推出的AR开发平台 ARCore Google 推出的增强现实 SDK ARFoundation ARFoundation是ARKit XR插件和ARCore XR插件
  • UnityVR--组件3--Line Renderer--线性渲染

    目录 线性渲染组件简介 绘制线条Line Renderer组件介绍 绘制拖尾Trail Renderer组件介绍 应用1 使用Line Renderer绘制线段 应用1实现 使用系统工具或自定义工具绘制线段 应用2 Trail Render
  • Unity中UI框架的使用1-添加面板、显示Loading页面

    其中BasePanel和Canvas都是挂在面板的预制物上的 1 导入我们的UI框架 本篇文章中有用的是两个UIPanelType NUIManager和NBasePanel 会放在文章最后供大家使用 2 先将我们做好的Panel设置成预制
  • unity后台加密时间锁

    前言 在做一些项目的时候 有些不良甲方在给完项目后会有不给尾款的情况 之前都是加一些水印啥的 感觉不是很方便 第一不美观 第二如果甲方给完尾款后还得重新打包去水印 然后又做过一个本地的时间锁 等到时间 程序直接退出 但是感觉还是不方便 有时
  • unity dots jobSystem 记录

    Looking for a way to get started writing safe multithreaded code Learn the principles behind our Job System and how it w
  • unity3d切换场景Application.LoadLevel(1)含义

    Application LoadLevel 1 场景ID
  • unity3d image组件不显示

    需要将UI组件放到画布下面
  • 【Unity】如何让Unity程序一打开就运行命令行命令

    背景 Unity程序有时依赖于某些服务去实现一些功能 此时可能需要类似打开程序就自动运行Windows命令行命令的功能 方法 using UnityEngine using System Diagnostics using System T
  • 游戏开发常见操作梳理之NPC任务系统

    多数游戏存在任务系统 接下来介绍通过NPC触发任务的游戏制作代码 using System Collections using System Collections Generic using UnityEngine
  • 游戏开发常见操作梳理系列之——玩家信息的显示系统

    在游戏中 有不少游戏在左上角会出现玩家的头像和等级以及血量 这就是玩家的信息显示系统 那么这些是如何制作的呢 接下来我将讲讲代码的操作 其它操作我会在其它笔记中一一说明 敬请期待 信息的显示相当简单就是控制一些UI 然后在其它系统里面填写相
  • 游戏开发常见操作梳理之NPC药品商店系统(NGUI版)

    后续会出UGUI Json的版本 敬请期待 游戏开发中经常会出现药品商店 实际操作与武器商店类似 甚至根据实际情况可以简化设置 废话不多说 直接上代码 药品商店的源码 using System Collections using Syste
  • 游戏开发常用实践操作之按动任意键触发

    接下来一些笔记会对于一些大大小小的实践操作进行记录 希望对你有所帮助 在游戏中 我们经常会遇到一些按动任意键触发的操作 接下来展示核心代码 以下是对于Unity中的操作 使用的UI是NGUI 对于核心操作没有影响 你可以自己置换 void

随机推荐

  • StaggeredGridLayoutManager与GridLayoutManager小细节注意点

    一 StaggeredGridLayoutManager 1 当我们的设置为VERTICAL时 很容易发现当上一行的高度排放相等时它一行排放的先后顺序是从左到右 2 当我们的设置为HORIZONTAL时 它总是从上到下排放的 3 当我们的设
  • opencv的安装、配置及所遇问题(Ubuntu16.04 + OpenCV3.4.2 + Python3.6)

    安装opencv对好多首次安装的开发者来说都是一场勇气和运气的较量 同样也是我在安装Ubuntu下安装过的众多软件包中最为波折的一款 在此记录安装过程中出现的各种error 幸运女神眷顾的安装顺序 1 安装ubuntu下的依赖项 sudo
  • 《Ansible自动化工具篇:Centos操作系统基于ansible工具一键远程离线部署之K8S1.24.12二进制版集群》

    一 部署背景 由于业务系统的特殊性 我们需要针对不同的客户环境部署二进制版K8S集群 由于大都数用户都是专网环境 无法使用外网 为了更便捷 高效的部署 针对业务系统的特性 我这边编写了 基于ansible自动化工具一键远程离线部署进制版K8
  • 办公利器:用Python向钉钉发送消息

    钉钉作为目前最热门的办公软件 在工作中大多数时间都在与他打交道 今天和大家分享一下如何用Python向钉钉发送消息 最终达到每日自动向指定群中发送销售日报 新建群机器人 首先打开群设置 点击智能群助手 选择添加自定义机器人 然后根据提示添加
  • 构造函数分类以及调用

    构造函数语法 类名 1 gt 构造函数 没有返回值也不写void 2 gt 函数名称与类名相同 3 gt 构造函数可以有参数的 因此是可以发生函数重载 4 gt 程序在调用对象时 会自动调用构造函数 无须手动调用 而且只会调用一次 析构函数
  • Servlet开发环境搭建

    Servlet是属于JAVA EE的范畴 是以JAVA SE为基础的 所以我们首先要配置JAVA的环境 不熟悉如何配置JAVA环境的可以参考 JAVA环境变量配置 这里我们的开发工具选择Eclipse Web容器选择Tomcat eclip
  • CentOS 7 vs CentOS 6新特性

    1 CentOS7 简介 CentOS Community Enterprise Operating System 中文意思是 社区企业操作系统 是Linux发行版之一 它是来自于Red Hat Enterprise Linux依照开放源代
  • 修改IP 脚本

    echo off echo echo 1 地税外网 echo 2 地税内网 echo 3 公司 echo 4 自动获取 echo echo 选择你要设置的网络 set p x if x 1 goto a if x 2 goto b if x
  • css中align-self属性是什么

    css中align self属性是什么 1 align self属性定义flex子项单独在侧轴 纵轴 方向上的对齐方式 2 align self多了个auto 默认值 表示继承自flex容器的align items属性值 实例 CSS co
  • 深度学习(二十八)基于多尺度深度网络的单幅图像深度估计

    基于多尺度深度网络的单幅图像深度估计 原文地址 http blog csdn net hjimce article details 50569474 作者 hjimce 一 相关理论 本篇博文主要讲解来自2014年NIPS上的一篇paper
  • 微信收付通V3支付

  • Selenium3+Python3框架之生成测试报告并发送邮件

    coding utf 8 Time 2019 10 18 Author carl dj import os import unittest import time import HTMLTestRunner from email mime
  • 关于Linux重新安装java环境报错

    警告 jdk 8u181 linux x64 rpm 头V3 RSA SHA256 Signature 密钥 ID ec551f03 NOKEY 准备中 100 软件包 jdk1 8 2000 1 8 0 181 fcs x86 64 已经
  • SpringMVC:从入门到精通,7篇系列篇带你全面掌握--六.JSON处理和全局异常处理

    Welcome Huihui s Code World 接下来看看由辉辉所写的关于SpringMVC的相关操作吧 目录 Welcome Huihui s Code World 前言 一 SpringMVC中json数据的处理 1 导入相关依
  • Unity 性能优化总结

    影响性能的因素 造成游戏性能瓶颈的主要原因分成以下几个方面 1 CPU 1 过多的 draw call 2 复杂的脚本或者物理模拟 2 GPU 1 顶点处理 过多的顶点 过多的逐顶点计算 2 片元处理 过多的片元 既可能是由于分辨率造成的
  • bubbo调用Failed to invoke remote method异常解决

    bubbo调用服务异常 com alibaba dubbo rpc RpcException Failed to invoke remote method getPlanFlowInfo provider dubbo 10 20 30 16
  • Tez 简介

    目录 一 Tez简介 二 Tez UI界面 三 Tez 日志 一 Tez简介 1 1 Tez 是支持 DAG 作业的开源计算框架 它可以将多个有依赖的作业转换为一个作业从而大幅提升 DAG 作业的性能 从本质上讲 Tez 组成非常简单 数据
  • asm: 实现打印“Hello, world!“

    使用汇编打印 Hello world 实现打印 Hello world 的汇编代码 代码详细剖析 实现打印 Hello world 的汇编代码 我们来直接贴代码 section text global start start mov edx
  • 【华为OD机试真题 JAVA】可以组成网络的服务器

    JS版 华为OD机试真题 JS 可以组成网络的服务器 标题 可以组成网络的服务器 时间限制 1秒 内存限制 262144K 语言限制 不限 在一个机房中 服务器的位置标识在 n m 的整数矩阵网格中 1 表示单元格上有服务器 0 表示没有
  • UI页面切换按钮随页面切换缩放

    选中按钮放大其余按钮缩小的 效果 using System Collections using System Collections Generic using UnityEngine public class BottomBarBtn M