ngui通过颜色处理不规则点击的判断

  最近因为项目某个功能的需求,需要判断不规则区域的点击。

  网上找了一波,大致可分为两种方法,一种是使用Polygon Collider 2D,另一种就是使用颜色判断了。前者虽然方便,且项目里的ngui版本也支持2D点击的判断。但是因为这个功能需要使用大量的预制,同时每个预制上又有很多不规则点击区域,如果每个都去加Polygon Collider 2D的话,工作量简直不能直视。于是选择了第二种方法,但是找遍网上只有相关的思路,却没有相关代码,于是只能自己动手写了。。。

  代码。。。

1 Vector3 pos = texture.transform.InverseTransformPoint(UICamera.lastWorldPosition);
2 Vector3[] corners = texture.localCorners;
3 float x = Mathf.Clamp01((pos.x - corners[0].x) / (corners[2].x - corners[0].x));
4 float y = Mathf.Clamp01((pos.y - corners[0].y) / (corners[2].y - corners[0].y));
5 Texture2D tex = texture.mainTexture as Texture2D;
6 Color color = tex.GetPixelBilinear(x, y);

  上面代码里面的texture可以是UITexture,也可以是UISprite,当然UISprite我并没有测试。最终得到的color就可以拿来做点击判断了,我这里使用的是color的alpha值来做判断的。

  对了,要使用这段代码需要注意要把对应图片的 “Read/Write Enable” 权限打开,否则会报错。。。

 

  转载请注明出处: https://www.cnblogs.com/yuan-yu/p/13494704.html

 

 

你可能感兴趣的:(ngui通过颜色处理不规则点击的判断)