本文章由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代码:

  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,把这个东西给切换隐藏了一下,然后代码并没有执行。

解决方法也简单:

就是使用协同,等待零点几秒,来做个延迟。

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

然后去SetDirty(),就这样。

个人觉得可能是Unity的bug,或是使用方法的问题。

四、最后

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

毕竟还是别人辛勤劳动的结果啊!!!



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

谢谢各位!!!

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



若有问题,请随时联系!!!

非常感谢!!!

最新文章

  1. 使用Java原生代理实现AOP
  2. 在.NET中使用反射实现简易插件机制
  3. spring 事务问题
  4. Java environment variables and their functionality
  5. JavaScript 事件入门
  6. JMeter常用函数整理
  7. erlang自定义数据类型
  8. 关于类似(i++)+(++i)
  9. python初试牛刀
  10. 关于JS及应用程序开发的一些体会
  11. 快速学习bootstrap前台框架
  12. SIEM
  13. 读书笔记 effective c++ Item 30 理解内联的里里外外 (大师入场啦)
  14. [译] 所有你需要知道的关于完全理解 Node.js 事件循环及其度量
  15. Asp.Net Core 轻松学-玩转配置文件
  16. 适配iOS11
  17. lotus domino 软件学习网站(自己收藏的)
  18. Java_文件夹拷贝
  19. /dev/mem可没那么简单
  20. Flask入门和快速上手

热门文章

  1. python入门之实例-验证码
  2. 配置Gradle构建
  3. hdu4027Can you answer these queries?(线段树)
  4. vue 引用其他组件
  5. 基于Matlab的标记分水岭分割算法
  6. [转]Creating Mailing Labels in SQL Server Reporting Services (rdlc 数据1页 2竖排 显示)
  7. android开发学习 ------- 【转】 android中的单例模式 (详解)
  8. CF1149A Prefix Sum Primes
  9. java实现打开Windows控制台窗口
  10. COGS 2334. [HZOI 2016]最小函数值