博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Untiy CurvedUI 的使用的bug修正
阅读量:4597 次
发布时间:2019-06-09

本文共 2772 字,大约阅读时间需要 9 分钟。

本文章由cartzhang编写,转载请注明出处。 所有权利保留。
文章链接:
作者:cartzhang

一、CurvedUI 插件

插件从Asset store上面下载后, 版本为1.7,2016年6月的版本。

官方地址:
主要的代码有:
一个是编辑器代码,一个是曲面的设置,还有一个就是曲面的算法。
代码还是蛮长的,难度也有。需要的自己看吧!!!这里就不贴出来一一分析了。
用处不大!!!

二、问题

插件很好用。它是UGUI做的,代码写的也很明白。使用UGUI时间长的同学,心里可能会有些抵触。觉得这个用的时候有点不爽。但是这个基本还可以满足要求的。
问题是它的UI的刷新,有些问题。
我们需要的是,在分数增加的时候,可以实时滚动的增加得分条进度。但是数字可以跳动。但是进度就是不走。
在编辑器中需要点击一下Image,然后显示和隐藏一下就可以了。
如下图:
这里写图片描述

就是需要点击红圈内的Image。

这个很明显是刷新问题。

但是怎么解决呢?
没有办法还是先把代码看看吧!!
CurvedUISettings.cs代码:

void Update()        {            //recreate the geometry if entire canvas has been changed            if ((transform as RectTransform).rect.size != savedRectSize)            {                savedRectSize = (transform as RectTransform).rect.size;                SetUIAngle(angle);            }            //check for improper canvas size            if (savedRectSize.x == 0 || savedRectSize.y == 0)                Debug.LogError("CurvedUI: Your Canvas size must be bigger than 0!");            //moving the world space mouse            if (Controller == CurvedUIController.WORLD_MOUSE)            {                //touch can also be used to control a world space mouse, although its probably not the best experience                //Use standard mouse controller with touch.                if (Input.touchCount > 0)                {                    worldSpaceMouseOnCanvasDelta = Input.GetTouch(0).deltaPosition * worldSpaceMouseSensitivity;                }                else {                    worldSpaceMouseOnCanvasDelta = new Vector2((Input.mousePosition - lastMouseOnScreenPos).x, (Input.mousePosition - lastMouseOnScreenPos).y) * worldSpaceMouseSensitivity;                    lastMouseOnScreenPos = Input.mousePosition;                }                lastWorldSpaceMouseOnCanvas = worldSpaceMouseInCanvasSpace;                worldSpaceMouseInCanvasSpace += worldSpaceMouseOnCanvasDelta;                // Debug.Log("mouse canvas pos: " + worldSpaceMouseOnCanvas);            }            //更新数据            foreach (CurvedUIVertexEffect ve in GetComponentsInChildren
()) ve.SetDirty(); }

这个代码太长了。我就贴需要的吧!!!
说明问题即可。

注释部分写汉语的部分下面就是新增加代码。

就是这么简单。

原理也不用多说,就是设脏啊!!这样就可以顺利刷新了。

是不是超级简单。

三、BTW ,UGUI

在使用Unity的过程中,还是发现有某些UI的图片,不点击一下或显示隐藏一下就不能正常显示。
或是使用代码在Start中设置隐藏和显示,然而并没有作用,并卵的节奏。
怎么办?
原理还是一样,就是需要重新给设置一下。可以使用
这里写图片描述

Graphic.SetAllDirty

但是若还不起作用。我们用时候就是这样居然还不好用。

原因是在开始的时候我们有个切换UI,把这个东西给切换隐藏了一下,然后代码并没有执行。
解决方法也简单:
就是使用协同,等待零点几秒,来做个延迟。

IEnumerator Start()        {           yield return new WaitForSeconds(0.05f);            ChangeGunMessage();        }

然后去SetDirty(),就这样。
个人觉得可能是Unity的bug,或是使用方法的问题。

四、最后

希望大家还是要支持正版,付费去下载。

毕竟还是别人辛勤劳动的结果啊!!!
分享的地址也有,我私下里告诉你!!
谢谢各位!!!

———————–THE—–END———————————–

若有问题,请随时联系!!!
非常感谢!!!

转载于:https://www.cnblogs.com/qitian1/p/6461904.html

你可能感兴趣的文章
Django JWT
查看>>
云推送注意(MSDN链接)
查看>>
条件编译解决AutoCAD多版本问题
查看>>
java的Integer与int的比较
查看>>
openstack安装文档
查看>>
正在改变世界的硅谷创业趋势
查看>>
No2_3.接口继承多态_Java学习笔记_多态
查看>>
[转] 体内湿气重怎样祛除
查看>>
C#多线程学习(五) 多线程的自动管理(定时器)
查看>>
第三次作业
查看>>
物体坐标to世界坐标
查看>>
上传图片进行预览
查看>>
Git学习笔记(二)
查看>>
[翻译]OAuth入门指南 – 1.概述
查看>>
<context:component-scan/>和<mvc:annotation-driven/>的区别
查看>>
Android 命名规范 (提高代码可以读性)
查看>>
C# Emit动态代理生成一个实体对象
查看>>
geoserver发布mysql表数据
查看>>
LeetCode-121 Best Time to Buy and Sell Stock
查看>>
实验四:数据类型与运算符 4、运算符及表达式实训
查看>>