首页 > 其他分享 >通过CanvasRenderer.SetColor和Image.color修改UI组件颜色的区别

通过CanvasRenderer.SetColor和Image.color修改UI组件颜色的区别

时间:2024-01-24 10:56:19浏览次数:22  
标签:社区 SetColor CanvasRenderer color Image UI 组件 UWA

1)通过CanvasRenderer.SetColor和Image.color修改UI组件颜色的区别
2)OPPO相关机型没法在Unity启用90或120FPS
3)手机输入法中的emoji
4)Unity Application Patching怎么用


这是第369篇UWA技术知识分享的推送,精选了UWA社区的热门话题,涵盖了UWA问答、社区帖子等技术知识点,助力大家更全面地掌握和学习。

UWA社区主页:community.uwa4d.com
UWA QQ群:465082844

UI

Q:通常,当我们想要更改Image组件的Color时,我们可以直接修改Image组件的Color属性。原理是修改网格的顶点颜色。此操作有一定的开销,因为会导致Canvas.BuildBatch操作。

我最近看了一些UGUI源码,发现当Button组件设置为Color Tint类型时,点击时会出现颜色渐变过程,此时会触发一个协程,每次执行协程都会修改CanvasRenderer组件的颜色,而不是直接修改Image组件的Color属性。

public abstract class Graphic : UIBehaviour, ICanvasElement
{
    private readonly TweenRunner<ColorTween> m_ColorTweenRunner;

    //trigger on click
    public virtual void CrossFadeColor(Color targetColor, float duration, 
        bool ignoreTimeScale, bool useAlpha, bool useRGB)
    {
        //...
        var colorTween = new ColorTween {duration = duration, 
            startColor = canvasRenderer.GetColor(), targetColor = targetColor};

        //The callback here will be triggered in the coroutine,
        //Modify the color of the canvasRenderer component
        colorTween.AddOnChangedCallback(canvasRenderer.SetColor);

        colorTween.ignoreTimeScale = ignoreTimeScale;
        colorTween.tweenMode = mode;

        //Start coroutine
        m_ColorTweenRunner.StartTween(colorTween);
    }
}

  

请问这两种写作方式之间的本质区别是什么?直接修改CanvasRenderer.color是否更有效?

A:CanvasRenderer.SetColor方法的注释是CanvasRenderer的颜色会被用于和UI顶点色、Canvas Color相乘,来得到最后渲染UI网格所使用的顶点色。但是CanvasRenderer.SetColor不会触发C#层的GraphicRebuild,在Profiler中可以确认这一点。

从Profiler耗时比较来看,两种方法差距不明显,若去掉MonoJIT的编译耗时,可能Image.color效率还更高一些。

  

 

感谢宗卉轩@UWA问答社区提供了回答


Platform

Q:以下设置在小米10 Pro正确运行在90FPS:
Vsync Count已经设置为Don't Sync;
Application.targetFrameRate = 90或120。

华为MatePad正确运行在90FPS和120FPS,而OPPO Pad、一加8Pro(氢os)、一加9Pro(ColorOS)均只能运行在60FPS。

测试了OPPO Pad玩LOL手游版可以通过改设置文件的方式运行在120FPS,说明设备本身是支持120FPS的。

测试了两款游戏均有以上问题,Unity版本分别为2018.4.14和2019.4.29,不知道有没有熟悉OPPO设备的同学可以帮忙解答一下。

针对以上问题,有经验的朋友欢迎转至社区交流分享:
https://answer.uwa4d.com/question/62612ec436a2fd066de2febf


UI

Q:在《寒霜启示录》中,当选择游戏中的表情之后,该表情出现在输入栏中,点击输入栏进行编辑,该表情出现在输入法中的输入栏,这个怎么做到的(一般情况下游戏内的表情都是类似#1、#2、#3这种,然后emoji系统检测该字段转化为图片的)?

针对以上问题,有经验的朋友欢迎转至社区交流分享:
https://answer.uwa4d.com/question/6596792c3625c22cffcb1dcd


Editor

Q:最近看到Unity文档有一个对Application Patching的介绍,据说是可以加速真机测试的速度,因此想使用一下。

原本项目的打包流程是:
1. 导出安卓工程
2. 把AssetBundle复制到安卓工程里
3. 打出APK

但是使用了Patching功能后发现,原本800MB的应用变成200MB,而且AssetBundle全都读取不到了,感觉像是重新打了一个APK安卓,而且没有管AssetBundle,然后把我之前的应用覆盖安装了,有大佬知道是哪里用错了吗,还是这个功能只能用于默认的构建管线?

A1:一般来说,针对热更新,要么你Android测试机本地内网做了热更新机制,要么你也可以手动将资源文件(可能+Lua代码)替换到可读写目录,也可以达到不用安装包的目的(主要是省了打APK的时间,只需要打资源就行,但是如果打过一次APK之后再打APK,这个打APK速度还是很快的可以接受的)。

感谢夏霖锐@UWA问答社区提供了回答

A2:解决了,第一次Patch确实是直接覆盖整个APP,后续的Patch才是增量,因此需要手动复制AssetBundle到StreamingAssets目录。

但是覆盖APP又会导致我在导出的AndroidProj中做的自定义修改没法生效,这个问题还是没解决。

感谢题主布偶团子@UWA问答社区提供了回答封面图来源于网络


今天的分享就到这里。生有涯而知无涯,在漫漫的开发周期中,我们遇到的问题只是冰山一角,UWA社区愿伴你同行,一起探索分享。欢迎更多的开发者加入UWA社区。

UWA官网:www.uwa4d.com
UWA社区:community.uwa4d.com
UWA学堂:edu.uwa4d.com
官方技术QQ群:465082844

标签:社区,SetColor,CanvasRenderer,color,Image,UI,组件,UWA
From: https://www.cnblogs.com/uwatech/p/17984132

相关文章

  • F - Usual Color Ball Problems
    F-UsualColorBallProblemsProblemStatementYouaregivenpositiveintegers$N$,$M$,$K$,andasequenceofpositiveintegersoflength$N$,$(C_1,C_2,\ldots,C_N)$.Foreach$r=0,1,2,\ldots,N-1$,printtheanswertothefollowingproblem.......
  • Matlab-pcolor绘制二维色温图并修改温度条颜色
    figure(3)pcolor(time,yData',data1.ConVel')shadinginterp;colorbar;color_1=[0,0,1];color_2=[1,1,1];color_3=[1,0,0];num12=45;num23=25;R_mat=[linspace(color_1(1),color_2(1),num12),linspace(color_2(1),color_3(1),num23)];G_mat=[linspace(col......
  • 17 Two-Colored Dominoes
    多米诺骨牌在棋盘上放置多米诺骨牌,两端的颜色都不一样,要求横竖的总和是一样的......
  • android navigationBarDividerColor 无效
    AndroidnavigationBarDividerColor无效问题解析与解决1.问题背景在开发Android应用程序时,我们经常会使用导航栏(NavigationBar)来提供用户导航和操作的功能。导航栏中的分割线(divider)是一种常见的设计元素,用于分隔不同的导航按钮或操作按钮。在Android中,我们可以使用navigationB......
  • Android navigationBarDividerColor
    实现AndroidnavigationBarDividerColor的步骤流程图flowchartTDA(开始)B(查找navigationBar对象)C(创建dividerDrawable对象)D(设置dividerDrawable为navigationBar的dividerDrawable属性)E(结束)A-->B-->C-->D-->E介绍在Android开发......
  • 【学术】Color-Coding 随机染色
    子图同构图同构定义:对于图\(G=(V,E)\)和\(G'=(V',E')\),如果存在双射函数\(f:V\toV'\),使得\((v_i,v_j)\inE\)当且仅当\((f(v_i),f(v_j))\inE'\),则称\(G\)与\(G'\)同构,记作\(G\congG'\)。子图同构问题:给定点数为\(n\)的图\(G=(V,E)\)......
  • python pyqt6 颜色弹窗 QColorDialog
     defsetColor(self):#避免窗口置顶后,Dialog被主窗口覆盖,所以需要传递self#设定默认颜色使用getColor的第一个参数(使用setCurrentColor不生效)#"选择颜色"为Dialog弹窗的标题#设定QColorDialog.ColorDialogOption.ShowAlphaChanne......
  • E - Christmas Color Grid 1
    E-ChristmasColorGrid1https://atcoder.jp/contests/abc334/tasks/abc334_e思路https://www.cnblogs.com/Lanly/p/17923753.htmlCodehttps://atcoder.jp/contests/abc334/submissions/49243194inth,w;bools[1005][1005];intc[1005][1005];//c-classlongl......
  • dic = dict(zip( ["a", "b"], ["h", "i"] )) lis_color
    dic=dict(zip(["a","b"],["h","i"]))lis_color=["lightred"]forkeyindic.keys():#问题1:判断键名是字典第几个键ind=list(dic.keys()).index(key)#问题2:根据索引循环选择颜色color=lis_color[i......
  • [Mac软件]ColorWell For Mac 7.4.0调色板生成器
    美丽而直观的调色板和调色板生成器是任何Web或应用程序开发人员工具包的必要补充!创建无限数量的调色板,快速访问所有颜色信息和代码生成,用于应用程序开发,非常简单。可编辑调色板数据库允许您存档和恢复任何调色板,以便稍后通过超快速搜索使用。您所有精心创建的调色板都与macOS调色板......