資源簡介
在圖片上繪制顏色,可實(shí)現(xiàn)畫筆功能和刮刮樂效果,工程里有DEMO直接使用就行了,,,Demo是我用來給客戶看效果的,做了就分享下!
代碼片段和文件信息
using?UnityEngine;
namespace?FreeDraw
{
????//?1.?將其附加到讀/寫的sprite圖像上
????//?2.?將繪圖層設(shè)置為在光線投射中使用
????//?3.?將繪圖層設(shè)置為在光線投射中使用
????//?4.?按住鼠標(biāo)左鍵畫出這個(gè)紋理!
????public?class?Drawable?:?MonoBehaviour
????{
????????[Tooltip(“彩筆顏色【橡皮擦就是透明彩筆】“)]?
????????public?Color?Pen_Colour?=?new?Color(255f?255f?255f?0f);
????????[Tooltip(“鋼筆寬度(實(shí)際上,它是一個(gè)半徑,以像素為單位)“)]
????????public?int?Pen_Width?=?20;
????????[Tooltip(“圖層面板“)]
????????public?layerMask?Drawing_layers;
????????//?在Unity的文件編輯器中必須有讀/寫權(quán)限
????????Sprite?drawable_sprite;
????????Texture2D?drawable_texture;
????????Vector2?previous_drag_position;
????????Color[]?clean_colours_array;
????????Color?transparent;
????????Color32[]?cur_colors;
????????bool?mouse_was_previously_held_down?=?false;
????????bool?no_drawing_on_current_drag?=?false;
????????void?Awake()
????????{
????????????drawable_sprite?=?this.GetComponent().sprite;
????????????drawable_texture?=?drawable_sprite.texture;
????????????//?保存圖片所有顏色
????????????clean_colours_array?=?drawable_texture.GetPixels(0?0?1920?1080);
????????}
????????void?Update()
????????{
????????????//?用戶按住鼠標(biāo)左鍵嗎?
????????????bool?mouse_held_down?=?Input.GetMouseButton(0);
????????????if?(mouse_held_down?&&?!no_drawing_on_current_drag)
????????????{
????????????????//?將鼠標(biāo)坐標(biāo)轉(zhuǎn)換為世界坐標(biāo)
????????????????Vector2?mouse_world_position?=?Camera.main.ScreenToWorldPoint(Input.mousePosition);
????????????????//?檢查當(dāng)前鼠標(biāo)位置是否與我們的圖像重疊
????????????????Collider2D?hit?=?Physics2D.OverlapPoint(mouse_world_position?Drawing_layers.value);
????????????????if?(hit?!=?null?&&?hit.transform?!=?null)
????????????????????//?我們已經(jīng)超越了我們所描繪的紋理!改變像素的顏色
????????????????????ChangeColourAtPoint(mouse_world_position);
????????????????else
????????????????{
????????????????????//?我們還沒有結(jié)束我們的目標(biāo)紋理
????????????????????previous_drag_position?=?Vector2.zero;
????????????????????if?(!mouse_was_previously_held_down)
????????????????????{
????????????????????????//這是一個(gè)新的拖動用戶在畫布上點(diǎn)擊離開
????????????????????????//在新的阻力開始之前,確保不會發(fā)生繪圖
????????????????????????no_drawing_on_current_drag?=?true;
????????????????????}
????????????????}
????????????}
????????????//?鼠標(biāo)釋放
????????????else?if?(!mouse_held_down)
????????????{
????????????????previous_drag_position?=?Vector2.zero;
????????????????no_drawing_on_current_drag?=?false;
????????????}
????????????mouse_was_previously_held_down?=?mouse_held_down;
????????}
????????//?在世界坐標(biāo)中傳遞一個(gè)點(diǎn)
????????//?改變世界周圍的像素點(diǎn)指向靜態(tài)的鋼筆顏色
????????public?void?ChangeColourAtPoint(Vector2?world_point)
????????{
????????????//?改變坐標(biāo)到這個(gè)圖像的局部坐標(biāo)
????????????Vector3?local_pos?=?transform.InverseTransformPoint(world_point);
????????????//?將這些轉(zhuǎn)換為像素坐標(biāo)
????????????float?pixelWidth?=?drawable_sprite.rect.width;
????????????float?pixelHeight?=?drawable_sprite.rect.height;
????????????float?unitsToPixels?=?pixelWidth?/?drawable_sprite.bounds.size.x?*?transform.localScale.x;
????????????//?需要把我們的坐標(biāo)居中
????????????f
評論
共有 條評論