Mail.ruПочтаМой МирОдноклассникиВКонтактеИгрыЗнакомстваНовостиКалендарьОблакоЗаметкиВсе проекты

Скрипт для рисования на текстуре не проводит линии

Дмитрий Р, Ученик (167), открыт 1 неделю назад
при быстром движении пальца, пиксели не успевают закрашиваться из-за чего возникают промежутки. Как это можно пофиксить?Вот мой код
     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);
}
}

}

}
}
1 ответ
Котище рыжий Мастер (1197) 1 неделю назад
Сделай автозаполнение между двумя последними точками. Но твоя линия будет чуть чуть ломаной. Или в момент рисования выполняй код в цикле while чтобы быстро компенсировать пробелы.
Похожие вопросы