void Update() { if (Input.touchCount == 1) { _touch = Input.GetTouch(0); Ray ray = _camera.ScreenPointToRay(_touch.position); RaycastHit hit; if (_Collider.Raycast(ray, out hit, 10000)) { int rayX = (int)(hit.textureCoord.x * _resolutionX); int rayY = (int)(hit.textureCoord.y * _resolutionY); if (_oldX != rayX | _oldY != rayY) { if (DrawType == "Quad") { DrawQuad(rayX, rayY); } else if (DrawType == "Circle") { DrawCircle(rayX, rayY); } else if (DrawType == "Eraser") { Erase(rayX, rayY); } } } }
void DrawCircle(int rayX, int rayY) { float r2 = Mathf.Pow(BrushSize / 2 - 0.5f, 2); for (int x = 0; x < BrushSize; x++) { float x2 = Mathf.Pow(x - BrushSize / 2, 2); for (int y = 0; y < BrushSize; y++) { float y2 = Mathf.Pow(y - BrushSize / 2, 2); if (x2 + y2 < r2) { if (rayX + x - BrushSize / 2 >= 0 && rayX + x - BrushSize / 2 < _resolutionX && rayY + y - BrushSize / 2 >= 0 && rayY + y - BrushSize / 2 < _resolutionY) { if (_Coords.Contains(new Vector2(rayX + x - BrushSize / 2, rayY + y - BrushSize / 2)) == false) { Color OldColor = _texture.GetPixel(rayX + x - BrushSize / 2, rayY + y - BrushSize / 2); Color newColor = Color.Lerp(OldColor, color, color.a); _texture.SetPixel(rayX + x - BrushSize / 2, rayY + y - BrushSize / 2, newColor); _Coords.Add(new Vector2(rayX + x - BrushSize / 2, rayY + y - BrushSize / 2)); _Colors.Add(OldColor); } } } } }