项目中有个新手引导,要求做一个圆圈,中间透明,四周黑色,取一定的Alpha值,由于游戏设定分辨率为1136*640,只是一个圆圈,如果使用大图的话未免浪费,而且由于新手引导是有策划配置修改,用大图的话也不是很灵活,一开始想到使用小图拼接加Anchor的方式,拼出来后电脑上一看,还不错,导包,放到手机上,各种缝隙。
没办法,此路不通,换个思路吧。
想到了NGUI中的九宫格切割sliced,想想自己可不可以这样做呢,不多说,试一下,结果刚好反掉了,我要的是中间不动,四周拉伸的效果,但是NGUI的是中间拉伸,四边不动试着调了下border,不行。
能不能改成中见不到,四周拉伸的效果呢。
以前逛过NGUI官方论坛,作者还是很热心的,基本每帖必回,本着不重复造轮子的原则,去看看,应该不会只有我一个人有这样的想法吧。
还真找到了帖子,但是先别高兴,作者说自己搞,这就是NGUI为什么开源的原因。心瞬间凉了,往下看,提问者说自己写好了,有点希望啊,但是由于项目原因不能公布。能不能不要这么打击我。。。
好吧,自己动手,丰衣足食。
查下NGUI的源代码,看看是如何实现的,能不能改动,代码如下
/// <summary>
/// Sliced sprite fill function is more complicated as it generates 9 quads instead of 1.
/// </summary>
public virtual void SlicedFill (BetterList<Vector3> verts, BetterList<Vector2> uvs, BetterList<Color32> cols)
{
Vector4 br = border * pixelSize;
if (br.x == 0f && br.y == 0f && br.z == 0f && br.w == 0f)
{
SimpleFill(verts, uvs, cols);
return;
}
Color32 c = drawingColor;
Vector4 v = drawingDimensions;
mTempPos[0].x = v.x;
mTempPos[0].y = v.y;
mTempPos[3].x = v.z;
mTempPos[3].y = v.w;
if (mFlip == Flip.Horizontally || mFlip == Flip.Both)
{
mTempPos[1].x = mTempPos[0].x + br.z;
mTempPos[2].x = mTempPos[3].x - br.x;
mTempUVs[3].x = mOuterUV.xMin;
mTempUVs[2].x = mInnerUV.xMin;
mTempUVs[1].x = mInnerUV.xMax;
mTempUVs[0].x = mOuterUV.xMax;
}
else
{
mTempPos[1].x = mTempPos[0].x + br.x;
mTempPos[2].x = mTempPos[3].x - br.z;
mTempUVs[0].x = mOuterUV.xMin;
mTempUVs[1].x = mInnerUV.xMin;
mTempUVs[2].x = mInnerUV.xMax;
mTempUVs[3].x = mOuterUV.xMax;
}
if (mFlip == Flip.Vertically || mFlip == Flip.Both)
{
mTempPos[1].y = mTempPos[0].y + br.w;
mTempPos[2].y = mTempPos[3].y - br.y;
mTempUVs[3].y = mOuterUV.yMin;
mTempUVs[2].y = mInnerUV.yMin;
mTempUVs[1].y = mInnerUV.yMax;
mTempUVs[0].y = mOuterUV.yMax;
}
else
{
mTempPos[1].y = mTempPos[0].y + br.y;
mTempPos[2].y = mTempPos[3].y - br.w;
mTempUVs[0].y = mOuterUV.yMin;
mTempUVs[1].y = mInnerUV.yMin;
mTempUVs[2].y = mInnerUV.yMax;
mTempUVs[3].y = mOuterUV.yMax;
}
for (int x = 0; x < 3; ++x)
{
int x2 = x + 1;
for (int y = 0; y < 3; ++y)
{
if (centerType == AdvancedType.Invisible &&