1max1 писал(а):https://docs.unity3d.com/ScriptReference/Texture2D.SetPixel.html
1max1 писал(а):Это мой собственный код, так что за адекватность работы не ручаюсь)
Пример использования:Синтаксис:Используется csharpSpriteRenderer sr = GetComponent<SpriteRenderer>();
int x,y; // Координаты пикселя.
var m_pos = Camera.main.ScreenToWorldPoint(Input.mousePosition);
// Получаем позицию пикселя в точке курсора (думаю как брать радиус сам догадаешься:))
if (sr.WorldToPixelPosition(m_pos, out x, out y)
{
// Если пиксель существует, тут делаешь что хотел...
}Синтаксис:Используется csharpstatic class Extensions
{
#region Vectors
public static Vector2 Divide(this Vector2 me, Vector2 divider)
{
try { return Vector2.Scale(me, new Vector3(1.0f / divider.x, 1.0f / divider.y)); }
catch { return Vector2.zero; }
}
public static Vector3 Divide(this Vector3 me, Vector3 divider)
{
try { return Vector3.Scale(me, new Vector3(1.0f / divider.x, 1.0f / divider.y, 1.0f / divider.z)); }
catch { return Vector3.zero; }
}
#endregion
#region Picture
// Проверка существования пикселя
public static bool IsPixelPositionExist(this SpriteRenderer me, int x, int y)
{
return x >= 0 && x <= me.sprite.texture.width
&& y >= 0 && y <= me.sprite.texture.height;
}
// Переводит координаты из пиксельных в мировые (если всё ок, вернет true)
public static bool PixelToWorldPosition(this SpriteRenderer me, int x, int y, out Vector3 worldPosition)
{
Vector3 delta = new Vector2(x, y) - me.sprite.pivot;
delta = Quaternion.AngleAxis(me.transform.eulerAngles.z, Vector3.forward) * delta;
delta = Vector3.Scale(delta, me.transform.localScale);
worldPosition = me.transform.position + delta / me.sprite.pixelsPerUnit;
return me.IsPixelPositionExist(x, y);
}
// Переводит координаты из мировых в пиксельные (если всё ок, вернет true)
public static bool WorldToPixelPosition(this SpriteRenderer me, Vector3 worldPosition, out int x, out int y)
{
Vector2 delta = worldPosition - me.transform.position;
delta = Quaternion.AngleAxis(-me.transform.rotation.eulerAngles.z, Vector3.forward) * delta;
delta = delta.Divide(me.transform.localScale);
Vector2 result = me.sprite.pivot + delta * me.sprite.pixelsPerUnit;
x = (int)result.x + 1;
y = (int)result.y + 1;
return me.IsPixelPositionExist(x, y);
}
// Вернет true если текстура читабельна (стоить галочка Read/Write в инспекторе)
public static bool IsReadWrite(this Texture2D me)
{
try { me.GetPixel(0, 0); return true; }
catch { return false; }
}
#endregion
}
А разве WorldToScreenPoint не из камеры нужно делать?
1max1 писал(а):Я вообще не улавливаю что за жесть ты мутишь честно говоря) Я дал тебе статический класс с расширением (ты ведь знаешь что это такое?). Ты решил вывернуть мой код наизнанку Возможно я не так доходчиво объяснил как его использовать, ок, вот тебе пример проекта, где используются этот метод.
https://mega.nz/#!7d4i1RCQ!zyud9tBCQcJa ... DwFqOZ3qhg
1max1 писал(а):Я вообще не улавливаю что за жесть ты мутишь честно говоря) Я дал тебе статический класс с расширением (ты ведь знаешь что это такое?). Ты решил вывернуть мой код наизнанку Возможно я не так доходчиво объяснил как его использовать, ок, вот тебе пример проекта, где используются этот метод.
https://mega.nz/#!7d4i1RCQ!zyud9tBCQcJa ... DwFqOZ3qhg
1max1 писал(а):Хз какие нужны спрайты, я взял первые что попались из интернета)
seaman писал(а):Маской не быстрее будет?
https://docs.unity3d.com/Manual/class-SpriteMask.html
Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 7