CanvasDraw(C#) :
using UnityEngine;
using System.Collections;
using UnityEngine.UI;
using UnityEngine.EventSystems;
using UnityEngine.Events;
public class CanvasDraw : MonoBehaviour {
public static Texture2D CANVAS = null;
public static RectTransform RCET_Transform; // rectTransform for unity ui
public static RawImage RAW_IMAGE; // rawImage for unity ui
// canvas size
int canvasWidth = Screen.width;
int canvasHeight = Screen.height;
void Awake(){
/***********************
* TODO Componet Setting
* Prior start Calculate
************************/
RAW_IMAGE = GetComponent<RawImage> ();
RCET_Transform = GetComponent<RectTransform> ();
RCET_Transform.anchoredPosition = new Vector2 (Screen.width / 2, Screen.height / 2);
}
// Use this for initialization
void Start () {
/*******************************
* TODO Create Canvas
* Unity UI When either Canvas
******************************/
CANVAS = new Texture2D (canvasWidth, canvasHeight);
Color[] color = new Color[CANVAS.width * CANVAS.height]; // Canvas pixel value in color array
for (int i = 0; i < color.Length; i++) // read canvas value
color [i] = Color.white; // read canvas pixel color white
CANVAS.SetPixels (color); // write canvas setPixels
CANVAS.Apply (); // canvas Apply
RAW_IMAGE.texture = CANVAS; // canvas for rawimage
// Canvas SetSize
RCET_Transform.sizeDelta = new Vector2 (CANVAS.width, CANVAS.height);
RCET_Transform.pivot = new Vector2 (0.5f, 0.5f);
}
}
using System.Collections;
using UnityEngine.UI;
using UnityEngine.EventSystems;
using UnityEngine.Events;
public class CanvasDraw : MonoBehaviour {
public static Texture2D CANVAS = null;
public static RectTransform RCET_Transform; // rectTransform for unity ui
public static RawImage RAW_IMAGE; // rawImage for unity ui
// canvas size
int canvasWidth = Screen.width;
int canvasHeight = Screen.height;
void Awake(){
/***********************
* TODO Componet Setting
* Prior start Calculate
************************/
RAW_IMAGE = GetComponent<RawImage> ();
RCET_Transform = GetComponent<RectTransform> ();
RCET_Transform.anchoredPosition = new Vector2 (Screen.width / 2, Screen.height / 2);
}
// Use this for initialization
void Start () {
/*******************************
* TODO Create Canvas
* Unity UI When either Canvas
******************************/
CANVAS = new Texture2D (canvasWidth, canvasHeight);
Color[] color = new Color[CANVAS.width * CANVAS.height]; // Canvas pixel value in color array
for (int i = 0; i < color.Length; i++) // read canvas value
color [i] = Color.white; // read canvas pixel color white
CANVAS.SetPixels (color); // write canvas setPixels
CANVAS.Apply (); // canvas Apply
RAW_IMAGE.texture = CANVAS; // canvas for rawimage
// Canvas SetSize
RCET_Transform.sizeDelta = new Vector2 (CANVAS.width, CANVAS.height);
RCET_Transform.pivot = new Vector2 (0.5f, 0.5f);
}
}
----------------------------------
TestPaint(C#) :
using UnityEngine;
using System.Collections;
public class TestPaint : MonoBehaviour {
public Color paintColor = Color.red; // paint color
Vector2 oldSetPixelVector2; // after write pixel
public float zoom = 1, rotation = 0;
// Update is called once per frame
void Update () {
/**********************************
* TODO Paint
* Mouset when either Paint
*********************************/
if(Input.GetMouseButton(0)){
if(CanvasDraw.CANVAS != null){
float offsetX = (CanvasDraw.RCET_Transform.anchoredPosition.x - (CanvasDraw.CANVAS.width * zoom)/2);
float OffsetY = (CanvasDraw.RCET_Transform.anchoredPosition.y - (CanvasDraw.CANVAS.height * zoom)/2);
float x = (Input.mousePosition.x - offsetX)/zoom;
float y = (Input.mousePosition.y - OffsetY)/zoom;
Vector2 v = RotateSquare(x, y, CanvasDraw.CANVAS.width, CanvasDraw.CANVAS.height, rotation/(180/Mathf.PI));
float dis = Vector2.Distance(oldSetPixelVector2, v);
float split = 1/ dis;
if(!Input.GetMouseButtonDown(0)){
for(float i = 0; i<1; i+=split){
Vector2 paintSetPixel = Vector2.Lerp(oldSetPixelVector2, v, i); // Paint point x,y lerp
CanvasDraw.CANVAS.SetPixel((int)paintSetPixel.x, (int)paintSetPixel.y, paintColor); // Paint SetCanvas Pixel
}
}
CanvasDraw.CANVAS.Apply(); // canvas write pixel
oldSetPixelVector2 = v; // paint vector2D posistion
}
}
}
Vector2 RotateSquare(float X, float Y, int W, int H, float phi){
float sin = Mathf.Sin(phi), cos = Mathf.Cos(phi);
int xc = W/2, yc = H/2;
int x = (int)(cos*(X-xc)+sin*(Y-yc)+xc);
int y = (int)(-sin*(X-xc)+cos*(Y-yc)+yc);
return new Vector2(x, y);
}
}
----------------------------------
結果圖: