做项目时美术居然要把英雄的属性值设置成雷达图的样式,看起来直观一点,然而他们只给了我一张图片……….
我当时懵逼了,一张图让我怎么做动态改变? 难道不应该是做动画吗? 然而我想了一下似乎做动画也不是很好,然后我开始想什么东西可以让UI动态的改变呢? 根据输入的值显示不同的形状呢?
这是值得研究的问题.在网上找了一些资料发现 可以用一个面片来做,把面片放在UI上面然后动态改变面片的顶点,实现不同的形状.
雷达图如下:
由于我们的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个点.