UGUI Text 逐字出现

   在做剧情系统的时候,有个剧情模式叫立绘对话,也就是那种你说一句我说一句的那种,策划的要求是希望对话是逐字出现的,而且文字都是在表格里面配置的还需要支持字体颜色的配置.显示一句完成后自动显示下一句.

   读取表格显示字体是很简单的.但是要逐字出现,由于之前没做过,首先想到的是,字体应该都是已经全部放上去了,然后在Text的上面放上一层遮罩.没隔一段时间把上面这层遮罩缩短一个字.这样就可以实现逐字出现的样式了.但是后面发现不行,因为每个字的大小和宽度是不一样的,而且还会有标点符号的区分.

  于是只能是使用那种每次往Text组件上加上一个字,但是这样做的问题又出现了,因为是每次加上一个字的,也就是说事先定义的颜色标记是没有用的他会被逐字打印在Text上了,比如 <color>标记他会首先打印 "<" 这个符合然后陆续把<color>整个显示出来 而不会像直接显示文字那样把<color>标记里面的文字按照定义的颜色显示出来.

  为了实现这个功能我只好用个正则表达式,把<color></color>整个内容先截取出来然后再赋值颜色值整体显示出来,也就是说,只要遇到有颜色标记的字就截取出来然后整体显示出来,这样就可以实现所需要的功能了.

部分代码如下:

//截出带颜色部分字体
   Regex reg = new Regex("(?<=<color).*?(?=</color>)", RegexOptions.None);
   MatchCollection matchs = reg.Matches(dialogDeploy_.text);
   //Debug.Log(matchs[0].Index-6+"-----"+ matchs[0].Length+6+8);
   int k = 0;
   ch = dialogDeploy_.text.ToCharArray();//转换成数组
   for (int j = 0; j < ch.Length; ++j)
    {

     yield return new WaitForSeconds(0.1f);
     if (isNext)
     {
      break;
     }
      if (ch[j] == '<' && matchs[k].Length + 6 + 8 
      < dialogDeploy_.text.Length)
     {
       //匹配出带颜色的字体
       showText_.text += 
       dialogDeploy_.text.Substring(j, matchs[k].Length + 6 + 8);
       j += matchs[k++].Length + 6 + 8;
     }
     else
     {
       showText_.text += ch[j];//显示每个字
     }
               
            }
            yield return new WaitForSeconds(0.5f);
            showText_.text = "\n";
            ch = null;
            ++i;
 }

U3D动态建模

做项目时美术居然要把英雄的属性值设置成雷达图的样式,看起来直观一点,然而他们只给了我一张图片……….

我当时懵逼了,一张图让我怎么做动态改变? 难道不应该是做动画吗? 然而我想了一下似乎做动画也不是很好,然后我开始想什么东西可以让UI动态的改变呢? 根据输入的值显示不同的形状呢?

这是值得研究的问题.在网上找了一些资料发现 可以用一个面片来做,把面片放在UI上面然后动态改变面片的顶点,实现不同的形状.

雷达图如下:

QQ截图20161107163618.jpg

由于我们的UI部分是需要进行热更新的所以这个功能我是用LUA写的但是可以很容易的翻译成C#的:

 local attributeMesh = self.transform:Find("模型物体"):GetComponent(UnityEngine.MeshFilter)
 local verticesInit=attributeMesh.mesh.vertices
 this.SetHeroAttribute(attributeMesh,0,0,0.1)
 function this.SetHeroAttribute(attributeMesh,x,y,z)
    local  mesh = attributeMesh.mesh
    local vertices = mesh.vertices
    vertices[1] =verticesInit[1]-UnityEngine.Vector3(x,y,z)//把原来的顶点值减去设置的值再赋给模型的顶点
    vertices[2] =verticesInit[2]-UnityEngine.Vector3(x,y,z)//这里只改变了 第2和第3个顶点的值,这样原来的5角型就会变的不规则了.
    mesh.vertices = vertices
end

这个面片实际上有5个顶点,但是为了演示我在代码里只改变了它2个点.

Unity3D模型动态切割方案

在做项目时,美术那边提了一个需求,他们希望我们程序这边能用U3D来实现人物模型的被子弹击中爆炸的效果,也就是被子弹打中后怪物模型爆炸碎开的效果.

之前他们项目中的做法是,事先把模型切开,切成很多小块然后组装在一起,再在U3D中把每块模型步入刚体和碰撞器.

这次他们觉得这样工作量有点大,每个需要爆炸的模型都要事先切开,然后导入U3D,再处理. 于是把这个在U3D中动态切割模型的任务交给了我.我本能反应是先看看市面上的其他人的解决方案

发现并没有找到有用的方案,然后我开始找相关的插件.找到了 Shatter Toolkit 这个插件,这个插件就是用来切割模型的,而且可以自定义切开后的切口颜色.这样就很好办了.然后我按照插件上的

方法,用在了人物模型中,但是发现却切不开,于是我有弄了一个立方体,发现切开毫无问题.为什么我的人物模型切不开呢? 仔细研究发现,原来人物模型上有骨骼.如果模型带骨骼的话这个插件是切不开的.而且这个插件需要在被切割的模型上加上网格碰撞器,这是非常耗资源的.于是这个插件不可取.只能另找其他方法了.

然后我有陆续找了一下插件发现都是无法切开带骨骼的模型的,研究发现这些插件也是通过 UvMapper 获取模型上的顶点然后分解为小模块再新建出对象加上碰撞器和刚体,这样每个模块又可被分解.至于为什么带骨骼的切不开,当时没找到原因,但是可以确定的是确实是因为骨骼的原因.

于是,切割方案还是用了以前的方案进行.但是如果是普通的模型比如箱子之类的是可以使用Shatter Toolkit 这个插件的.

QQ截图20161107161634.jpg

微信自动点赞工具

  朋友圈的里面的动态更新太快,都没来得及看就被新的动态覆盖了,如果不给点赞可能很多朋友会以为我不关注他们呢,所以突发奇想,想要用按键精灵来做一个微信朋友圈自动点赞的工具.

于是利用之前学习到的按键精灵和MQ语言的知识轻轻松松就开发出来了哈哈! 

   

         

这个脚本现在只能适应在小米5 分辨率的手机上,因为我的安卓手机是小米5,如果要适应其他手机,其实只需要更改一下识别的坐标就可以了.

        

上脚本代码吧!

        

小米5版本:

Dim screenX,screenY,deviceID,colorDep,shijian
screenX = GetScreenX()
screenY = GetScreenY()
colorDep = GetScreenColorDep()
deviceID = GetDeviceID()

Dim dTime=1000

Dim dlTime=2000

Dim cTime=500 

Sub 信息提示(内容)
    TracePrint 内容
    ShowMessage 内容
    Delay dTime
End Sub

Sub 单击(x, y,含义)
Touch x, y, cTime
TracePrint 含义
Delay dTime
End Sub

Sub 单击T(x,y,t,含义)
Touch x,y,t
TracePrint 含义
Delay dTime
End Sub

Call 信息提示("启动微信~")
RunApp "com.tencent.mm"
Delay dlTime

Call 单击(342, 1467, "单击第一个微信")

Call 单击(672, 1830, "单击发现")

Call 单击(350, 330, "单击朋友圈")

While True
        
    Dim intX,intY
	FindMultiColor 978,589,1045,1248,"B09385","-13|-2|F8F8F8,10|-1|F8F8F8,-32|-1|B09385,
	19|0|B09385,-4|12|B09385,-5|-15|B09385,-21|-15|B09385,-24|17|B09385,17|-18|B09385",
	0,0.9,intX,intY
	If intX > -1 And intY > -1 Then
		Call 单击(intX, intY, "单击")	
		FindMultiColor 532,437,572,1287,"FFFFFF","7|17|F4F3F3,14|20|3D3B34,
		0|22|3D3B34,17|-2|FFFFFF,24|16|3D3B34,-9|15|FFFFFF,19|29|FFFFFF,9|31|3D3B34,
		9|-1|615F59",0,0.9,intX,intY
		If intX > -1 And intY > -1 Then
			Call 单击(intX, intY, "单击点赞")
		End If		
	End If
	If CmpColorEx("541|1876|DADADA,32|1821|F8F8F8,958|1825|F8F8F8,25|1769|D3D3D3,
	588|1769|D3D3D3,1060|1769|D3D3D3,759|1876|E1E1E1,561|1120|FFFFFF",0.9) = 1 Then
	   Exit While
	End If
	Swipe 1000, screenY / 2, 1000, screenY / 2 - 400
    Delay 1000
Wend

   

海马安卓模拟器版:

Dim screenX,screenY,deviceID,colorDep,shijian
screenX = GetScreenX()
screenY = GetScreenY()
colorDep = GetScreenColorDep()
deviceID = GetDeviceID()

Dim dTime=1000

Dim dlTime=2000

Dim cTime=500 

Sub 信息提示(内容)
    TracePrint 内容
    ShowMessage 内容
    Delay dTime
End Sub

Sub 单击(x, y,含义)
Touch x, y, cTime
TracePrint 含义
Delay dTime
End Sub

Sub 单击T(x,y,t,含义)
Touch x,y,t
TracePrint 含义
Delay dTime
End Sub

Call 信息提示("启动微信~")
RunApp "com.tencent.mm"
Delay dlTime

Call 单击(450, 1220,"单击发现")

Call 单击(250, 230, "单击朋友圈")

While True
        
    Dim intX,intY
	FindMultiColor 651,235,699,813,"B09385","-8|0|F8F8F8,8|1|F8F8F8,-19|2|B09385,-1|9|B09385"
	,0,0.9,intX,intY
	If intX > -1 And intY > -1 Then
		Call 单击(intX, intY, "单击")
		
		FindMultiColor 306,159,380,955,"3F3A39","24|-2|3F3A39,2|33|3F3A39,
		24|-26|3F3A39,48|8|3F3A39,23|21|3F3A39,44|4|FFFFFF,39|-8|C9C8C8,49|-3|FFFFFF,
		53|1|C5C4C4",0,0.9,intX,intY
		If intX > -1 And intY > -1 Then 
		    Call 单击(intX, intY, "单击点赞")
		End If

		//Call 单击(intX-367, intY, "单击点赞")
	End If
	
	If CmpColorEx("360|1249|DADADA,117|1249|F5F5F5,624|1251|EDEDED,363|1179|D3D3D3,
	632|1216|F8F8F8,31|1236|F8F8F8,355|1215|F8F8F8,165|1213|F8F8F8,672|1223|F8F8F8,
	315|1264|F8F8F8",0.9) = 1 Then
	    Exit While
	End If
	
	Swipe screenX / 2, screenY / 2, screenX / 2, screenY / 2 - 300
    Delay 1000
Wend

 如果你没有安卓手机可以试试,安装模拟器哦 把模拟器的分辨率设置到720*1280 的就可以了 ,快开始你的自动化之旅吧!

 如果你还不会使用按键精灵,请看我的这篇文章 http://huangyi.cc/?p=752 

微信小程序

   今天研究了一下微信小程序,他的设计还是很巧妙的.通过开发文档还是看得非常详细的.

   腾讯的目的是为了在微信里面建立它的APP生态圈,以后我们的手机上可能就不需要再安装这么多APP了,直接进入微信就可以享受到想要的服务.这个野心是非常大的.

   不过既然腾讯开发出了这么一套框架就肯定会花大力去推广的而且肯定会有一波红利等着我们,我需要能抓住这一波.

他的架构非常简单,分为视图层和逻辑层当然你也可以再分出一个数据层.

        小程序开发框架的目标是通过尽可能简单、高效的方式让开发者可以在微信中开发具有原生 APP 体验的服务。框架提供了自己的视图层描述语言 WXML 和 WXSS,以及基于 JavaScript 的逻辑层框架,并在视图层与逻辑层间提供了数据传输和事件系统,可以让开发者可以方便的聚焦于数据与逻辑上。框架的核心是一个响应的数据绑定系统。整个系统分为两块视图层(View)和逻辑层(App Service)框架可以让数据与视图非常简单地保持同步。当做数据修改的时候,只需要在逻辑层修改数据,视图层就会做相应的更新

         虽然现在只发布了200个开发的内测账号,但是普通的没有账号的也可以使用开发工具开发的,只是部分的API会受限制而已,只要下载安装开发工具新建第一个项目时选择 无APPID 就可以实现普通的开发了.

QQ截图20161101232153.png

    它的结构如下:

QQ截图20161101232240.png

        

这里面包括了所有用到的开发编译和调试工具,其中一个小程序项目必须要有app.js,app.json,app.wxss 这个3个文件而且必须放在根目录下其中,.js后缀的是脚本文件,.json后缀的文件是配置文件,.wxss后缀的是样式表文件。微信小程序会读取这些文件,并生成小程序实例。

 

  1. app.json 是对整个小程序的全局配置。我们可以在这个文件中配置小程序是由哪些页面组成,配置小程序的窗口背景色,配置导航条样式,配置默认标题。

  2. app.wxss 是整个小程序的公共样式表。我们可以在页面组件的 class 属性上直接使用 app.wxss 中声明的样式规则。

  3. app.js是小程序的脚本代码。我们可以在这个文件中监听并处理小程序的生命周期函数、声明全局变量。调用框架提供的丰富的 API,如本例的同步存储及同步读取本地数据。

    更多的教程和API可以从 http://www.itlnk.com/  网站查询