效果
实现
一个角色的三维属性(力量,敏捷,智力)不是。。。
1、定义一个类,继承自MaskableGraphic
public class Triangle : MaskableGraphic, ICanvasRaycastFilter
2、中心的图可以使用自己的sprite
[SerializeField] Sprite m_image;
public override Texture mainTexture => m_image == null ? s_WhiteTexture : m_image.texture;
3、定义
//定义三个pos
public Vector2 positionA;
public Vector2 positionB;
public Vector2 positionC;
//顶点信息
UIVertex[] m_vertexes = new UIVertex[3];
//三个顶点的数组
Vector2[] m_uvs = new Vector2[3];
protected override void Start()
{
//三角形 顺时针绘制
m_uvs[0] = new Vector2(0, 0);
m_uvs[1] = new Vector2(0.5f, 1);
m_uvs[2] = new Vector2(1, 0);
}
4、绘制 重新OnPopulateMesh方法
protected override void OnPopulateMesh(VertexHelper vh)
{
vh.Clear();
for (int i = 0; i < 3; i++)
{
m_vertexes[i].color = color;
m_vertexes[i].uv0 = m_uvs[i];
}
m_vertexes[0].position = positionA;
m_vertexes[1].position = positionB;
m_vertexes[2].position = positionC;
vh.AddVert(m_vertexes[0]);
vh.AddVert(m_vertexes[1]);
vh.AddVert(m_vertexes[2]);
//绘制的顺序
vh.AddTriangle(0, 1, 2);
}
5、在lua中使用,因为使用的是lua来写所有的ugui界面 在ugui中创建一个gameobject,然后上面需要CanvasRenderer组件,然后再添加绘制的c#脚本。
local triangle = self.view.image_hua:GetComponent("Triangle")
--[[
这个设置的pos目前还有点问题,这个需要乘上图片大小的一半,来控制pos。
而且绘制的时候0,0点是在所设置的gameobject的中心点,也不是在左下角。
因为要下班了,所以我明天再研究
]]
triangle.positionB = CS.UnityEngine.Vector2(0,pos[1]*90)
triangle.positionA = CS.UnityEngine.Vector2(-pos[2]*90,-pos[2]*90)
triangle.positionC = CS.UnityEngine.Vector2(pos[3]*90,-pos[3]*90)
triangle:SetVerticesDirty()
--[[ 包含的刷新方法
//调用后会在下一帧重新执行OnPopulateMesh
SetVerticesDirty();
//调用后会在下一帧重新设置material以及Texture
SetMaterialDirty();
//调用后会重新布局
SetLayoutDirty();
//以上全部调用
SetAllDirty();
]]
参考文档link