Имеется следующая ситуация: в Unity - у меня есть некий материал содержащий некую текстуру. Стоит следующая задача: при скролинге мышью по игровому объекту с данным материалом - рисовать линии на объекте - т.е как в Paint - но в realTime и по любому объекту на сцене. Для этого я добавил к объекту скрипт содержащий метод Draw:
public void Draw()
{
Vector2 MouseVector = new Vector2(OnMouseUp(),OnMouseDown());
Vector2 ImageVector = new Vector2( MainSHDtexture.width,MainSHDtexture.height);
for (int i = 0; i < ImageVector.magnitude; i++)
{
if (MouseVector.x<=ImageVector.x && MouseVector.y <= ImageVector.x)
{
int K = System.Convert.ToInt32(MouseVector.y);
int L = System.Convert.ToInt32(MouseVector.x);
for (K++; i < ImageVector.x; i++)
{
for (L++; i < ImageVector.y; i++)
{
Texture2D tx = (Texture2D)MainSHDtexture;
tx.SetPixel(K , L , Color.white);
MainSHDtexture = tx;
}
}
}
else if (MouseVector.y >= ImageVector.x )
{
int K = System.Convert.ToInt32(MouseVector.y);
for (K++; i < ImageVector.y; i++)
{
Texture2D tx = (Texture2D)MainSHDtexture;
tx.SetPixel(K , System.Convert.ToInt32( ImageVector.x), Color.white);
MainSHDtexture = tx;
}
}
else if (MouseVector.x <= ImageVector.y)
{
int K = System.Convert.ToInt32(MouseVector.x);
for (K++; i < ImageVector.y; i++)
{
Texture2D tx = (Texture2D)MainSHDtexture;
tx.SetPixel(K , System.Convert.ToInt32(ImageVector.y) , Color.white);
MainSHDtexture = tx;
}
}
}
}
Идею скрипта в следующем чем-то похожа на IntervalTree - пусть передвижения мыши можно задать как вектор - где его начало это нажатие кнопки, а его конец - соответственно- случай когда мы отпускаем кнопку мыши.
Соответственно в OnMouseUp() и OnMouseDown() - я возвращая координаты мыши X и Y
Точно так же в виде вектора можно задать и текстуру - начиная от ширины - заканчивая высотой - получится один отрезок суммарной длины.
Т.е сама задача сводится заменить пиксели из вектора ImageVector на все пиксели длины MouseVector. Я предпологая, что эт вектора не пересекаются, а параллельны, причем MouseVector - лежит "выше" ImageVector - и проекция MouseVector -это то самое количество пикселей необходимое для замены.
Далее я рассматриваю три случая - полной проекции MouseVector в ImageVector , проекции только головы MouseVector в начало ImageVector и проекции хвоста MouseVector в ImageVector .
Также хочу отметить что K++ - сделано от безвыходности - т.к разрешены только операции инкремента, дикремента и создания нового объекта.
Студиия и Unity ошибок не выдает, но скрипт не выполняет поставленной задачи - т.е не сетит нужные пиксели текстуры в нужный цвет.
Также смотрел под Debug с помощью точек-останова - скрипт при выполнении заходит во второй блок if (тот который else if).
Запись/чтение в свойствах текстуры - при импорте -разрешил.
В чем проблема?