开启辅助访问
 找回密码
 注册帐号

扫一扫,访问微社区

开发者专栏

关注:1675

当前位置:游戏蛮牛 技术专区 开发者专栏

__________________________________________________________________________________
开发者干货区版块规则:

  1、文章必须是图文形式。(至少2幅图)
      2、文章字数必须保持在1500字节以上。(编辑器右下角有字数检查)
      3、本版块只支持在游戏蛮牛原创首发,不支持转载。
      4、本版块回复不得无意义,如:顶、呵呵、不错......【真的会扣分的哦】
      5、......
__________________________________________________________________________________
查看: 1500|回复: 8

[cartzhang] CurvedUI 插件刷新问题

[复制链接]  [移动端链接]
排名
3933
昨日变化

52

主题

261

帖子

2168

积分

Rank: 11Rank: 11Rank: 11Rank: 11Rank: 11

UID
111101
好友
8
蛮牛币
6161
威望
0
注册时间
2015-6-29
在线时间
418 小时
最后登录
2017-4-28

专栏作家蛮牛译员七夕浪漫情人

发表于 2016-7-23 15:38:55 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有帐号?注册帐号

x
本帖最后由 cartzhang 于 2016-7-23 15:40 编辑

本文章由cartzhang编写,转载请注明出处。 所有权利保留。
文章链接:http://blog.csdn.net/cartzhang/article/details/51996538
作者:cartzhang

一、CurvedUI 插件

插件从Asset store上面下载后, 版本为1.7,2016年6月的版本。
官方地址:https://www.assetstore.unity3d.com/en/#!/content/53258
主要的代码有:
一个是编辑器代码,一个是曲面的设置,还有一个就是曲面的算法。
代码还是蛮长的,难度也有。需要的自己看吧!!!这里就不贴出来一一分析了。
用处不大!!!

二、问题


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

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

这个很明显是刷新问题。
但是怎么解决呢?
没有办法还是先把代码看看吧!!

CurvedUISettings.cs代码:

[C#] 纯文本查看 复制代码
 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<CurvedUIVertexEffect>())
                ve.SetDirty();

        }


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

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

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

是不是超级简单。

三、BTW ,UGUI


在使用Unity的过程中,还是发现有某些UI的图片,不点击一下或显示隐藏一下就不能正常显示。
或是使用代码在Start中设置隐藏和显示,然而并没有作用,并卵的节奏。

怎么办?
原理还是一样,就是需要重新给设置一下。可以使用

Graphic.SetAllDirty

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

  • [C#] 纯文本查看 复制代码
    IEnumerator Start()
            {
               yield return new WaitForSeconds(0.05f);
                ChangeGunMessage();
            }


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

四、最后

希望大家还是要支持正版,付费去下载。
毕竟还是别人辛勤劳动的结果啊!!!

分享的地址也有,我私下里告诉你!!
谢谢各位!!!

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

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



*****************************************
http://blog.csdn.net/cartzhang
*****************************************
回复

使用道具 举报

5熟悉之中
598/1000
排名
3339
昨日变化
18

0

主题

168

帖子

598

积分

Rank: 5Rank: 5

UID
156196
好友
0
蛮牛币
667
威望
0
注册时间
2016-7-10
在线时间
132 小时
最后登录
2017-4-29
发表于 2016-7-23 22:26:10 | 显示全部楼层
kan bu tai dong a,xie xie ni bu guo

回复 支持 反对

使用道具 举报

6蛮牛粉丝
1435/1500
排名
1097
昨日变化
4

5

主题

202

帖子

1435

积分

Rank: 6Rank: 6Rank: 6

UID
10760
好友
1
蛮牛币
3034
威望
0
注册时间
2013-12-20
在线时间
406 小时
最后登录
2017-3-23
发表于 2016-7-25 09:51:10 | 显示全部楼层
设脏的具体含义是什么?API里面并没有具体的说明啊

回复 支持 反对

使用道具 举报

3偶尔光临
224/300
排名
9896
昨日变化
2

2

主题

78

帖子

224

积分

Rank: 3Rank: 3Rank: 3

UID
148779
好友
0
蛮牛币
243
威望
0
注册时间
2016-5-16
在线时间
80 小时
最后登录
2016-10-9
发表于 2016-7-25 16:20:32 | 显示全部楼层

kan bu tai dong a,xie xie ni bu guo

回复 支持 反对

使用道具 举报

5熟悉之中
520/1000
排名
2722
昨日变化

0

主题

22

帖子

520

积分

Rank: 5Rank: 5

UID
114713
好友
0
蛮牛币
1031
威望
0
注册时间
2015-7-22
在线时间
132 小时
最后登录
2017-4-28
发表于 2016-7-25 21:56:01 | 显示全部楼层
坚决支持正版~~~所以分享的地址是~

回复 支持 反对

使用道具 举报

排名
25
昨日变化

50

主题

835

帖子

6828

积分

Rank: 9Rank: 9Rank: 9

UID
287
好友
43
蛮牛币
2367
威望
30
注册时间
2013-6-9
在线时间
1661 小时
最后登录
2017-4-29

七夕浪漫情人社区QQ达人活力之星原创先锋认证开发者

QQ
发表于 2016-7-26 09:23:05 | 显示全部楼层
棒棒哒!

回复

使用道具 举报

排名
3933
昨日变化

52

主题

261

帖子

2168

积分

Rank: 11Rank: 11Rank: 11Rank: 11Rank: 11

UID
111101
好友
8
蛮牛币
6161
威望
0
注册时间
2015-6-29
在线时间
418 小时
最后登录
2017-4-28

专栏作家蛮牛译员七夕浪漫情人

 楼主| 发表于 2016-7-28 10:12:56 | 显示全部楼层
忘记号码 发表于 2016-7-25 21:56
坚决支持正版~~~所以分享的地址是~

http://www.manew.com/forum.php?m ... p;page=2#pid1130350

你居然没有搜到!!

*****************************************
http://blog.csdn.net/cartzhang
*****************************************
回复 支持 反对

使用道具 举报

排名
3933
昨日变化

52

主题

261

帖子

2168

积分

Rank: 11Rank: 11Rank: 11Rank: 11Rank: 11

UID
111101
好友
8
蛮牛币
6161
威望
0
注册时间
2015-6-29
在线时间
418 小时
最后登录
2017-4-28

专栏作家蛮牛译员七夕浪漫情人

 楼主| 发表于 2016-7-28 10:28:02 | 显示全部楼层
浮云zzy 发表于 2016-7-25 09:51
设脏的具体含义是什么?API里面并没有具体的说明啊

个人理解的是,
一般对引擎内部渲染机制来说,每帧数据刷新的一个标记。
在帧缓存中,对应显存是否刷新,数据有无更新,若设脏(SetDirty)后,就会在下一帧的时候被刷新到。
否则就不会被渲染出来。

恩。就这些!!
[发帖际遇]: cartzhang 乐于助人,奖励 2 蛮牛币. 幸运榜 / 衰神榜

*****************************************
http://blog.csdn.net/cartzhang
*****************************************
回复 支持 1 反对 0

使用道具 举报

6蛮牛粉丝
1435/1500
排名
1097
昨日变化
4

5

主题

202

帖子

1435

积分

Rank: 6Rank: 6Rank: 6

UID
10760
好友
1
蛮牛币
3034
威望
0
注册时间
2013-12-20
在线时间
406 小时
最后登录
2017-3-23
发表于 2016-11-1 14:10:03 | 显示全部楼层
cartzhang 发表于 2016-7-28 10:28
个人理解的是,
一般对引擎内部渲染机制来说,每帧数据刷新的一个标记。
在帧缓存中,对应显存是否刷新, ...

懂了,太感谢了!

回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册帐号

本版积分规则

快速回复 返回顶部 返回列表