El código que tengo ahora es éste:
void OnMouseDown() {
Vector3 positionMouse = Camera.main.ScreenToWorldPoint(Input.mousePosition);
SpriteRenderer renderer = this.GetComponent<SpriteRenderer>();
Texture2D tex = renderer.sprite.texture;
newTex = (Texture2D)GameObject.Instantiate(tex);
Vector3 TexturePosition = renderer.transform.position;
Vector3 position2 = Camera.main.WorldToScreenPoint(TexturePosition);
Debug.Log(Camera.main.pixelHeight);
Debug.Log(Camera.main.pixelWidth);
float mult = Camera.main.pixelWidth / Camera.main.pixelHeight;
Debug.Log (Camera.main.pixelWidth);
float mult2 = 650/Camera.main.pixelWidth;
int x = (int)((Input.mousePosition.x - position2.x)*3/mult*mult2 + tex.width/2);
int y = (int)((Input.mousePosition.y - position2.y)*3/mult*mult2 + tex.height/2);
Color color = Camera.main.GetComponent<PaintGameScript>().paintColor;
fillTexture(x, y, color);
newTex.Apply();
renderer.sprite = Sprite.Create(newTex, renderer.sprite.rect, new Vector2(0.5f, 0.5f), 5f);
}
Que me sirve como aproximación para salir del paso, aunque intentaré que me funcione con lo que me decís. En mi programa tira porque la textura a colorear ocupa toda la pantalla y eso, pero preferiría arreglarlo en plan pixel perfect XD
Ahora la función de rellenar me está dando stackoverflow :/
void fillTexture(int x, int y, Color color){
newTex.SetPixel(x, y, color);
if(x > 0)
if(newTex.GetPixel(x-1,y) != Color.black &&
newTex.GetPixel(x-1,y) != color)
fillTexture(x-1,y,color);
if(x < newTex.width - 1)
if(newTex.GetPixel(x+1,y) != Color.black &&
newTex.GetPixel(x+1,y) != color)
fillTexture(x+1,y,color);
if(y > 0)
if(newTex.GetPixel(x,y-1) != Color.black &&
newTex.GetPixel(x,y-1) != color)
fillTexture(x,y-1,color);
if(y < newTex.height - 1)
if(newTex.GetPixel(x,y+1) != Color.black &&
newTex.GetPixel(x,y+1) != color)
fillTexture(x,y+1,color);
}
Lo curioso es lo siguiente:
Si dejo sólo los ifs del eje X y comento los de la Y, funciona bien (coloreando una línea horizontal).
Si dejo uno de la X y los dos de la Y también funciona.
Si dejo uno de la Y y los dos de la X no funciona, y por lo tanto si dejo los cuatro tampoco.