Страница 1 из 1
Color.Transparent ннадо
Добавлено:
26 окт 2012, 11:17
Acrobat
Здравствуйте!
Надо в класс Color вот такую штуку сделать Color.Transparent.
RGBA is (1, 1, 1, 0).
Очень часто используется в разработке. А то приходиться постоянно "new Color(1,1,1,0)" писать.
Re: Color.Transparent ннадо
Добавлено:
26 окт 2012, 18:42
DanielDem
Это сделать можно с помощь методов расширений класса
Re: Color.Transparent ннадо
Добавлено:
26 окт 2012, 18:54
Acrobat
DanielDem писал(а):Это сделать можно с помощь методов расширений класса
можно пример?
Re: Color.Transparent ннадо
Добавлено:
26 окт 2012, 19:03
DanielDem
Да, пожалуйста(пример из моего проекта):
А про методы расширения C# можно просто почитать в гугле
Используется csharp
//-----------------------------------------------------------------------------------------
/// <summary>
/// Статический класс реализующий методы расширений стандартных типов и типов Unity.
/// </summary>
//-----------------------------------------------------------------------------------------
public static class XCoreExtension
{
#region ======================== РАСШИРЕНИЕ ФУНКЦИОНАЛЬНОСТИ ТИПОВ ====================
//-------------------------------------------------------------------------------------
/// <summary>
/// Преобразование к 32-битному цветовому значению.
/// </summary>
/// <param name="rgba_color">Цвет в формате RGBA</param>
/// <returns>32-битное цветовое значение</returns>
//-------------------------------------------------------------------------------------
public static Color32 ToColor32(this Int32 rgba_color)
{
Color32 color_value = new Color32();
color_value.r = ((Byte)(rgba_color >> 24));
color_value.g = ((Byte)(rgba_color >> 16));
color_value.b = ((Byte)(rgba_color >> 8));
color_value.a = ((Byte)(rgba_color >> 0));
return (color_value);
}
//-------------------------------------------------------------------------------------
/// <summary>
/// Преобразование к цветовому значению.
/// </summary>
/// <param name="rgba_color">Цвет в формате RGBA</param>
/// <returns>Цветовое значение</returns>
//-------------------------------------------------------------------------------------
public static Color ToColor(this Int32 rgba_color)
{
const Single factor = 1.0f / 255.0f;
Color color_value = new Color();
color_value.r = factor * (Single)((Byte)(rgba_color >> 24));
color_value.g = factor * (Single)((Byte)(rgba_color >> 16));
color_value.b = factor * (Single)((Byte)(rgba_color >> 8));
color_value.a = factor * (Single)((Byte)(rgba_color >> 0));
return (color_value);
}
//-------------------------------------------------------------------------------------
/// <summary>
/// Преобразование к формату RGBA.
/// </summary>
/// <param name="color_value">32-битное цветовое значение</param>
/// <returns>Цвет в формате RGBA</returns>
//-------------------------------------------------------------------------------------
public static Int32 ToRGBA(this Color32 color_value)
{
return ((Int32)((color_value.r << 24) | (color_value.g << 16) | (color_value.b << 8) | color_value.a));
}
//-------------------------------------------------------------------------------------
/// <summary>
/// Преобразование к цветовому значению.
/// </summary>
/// <param name="color_value">32-битное цветовое значение</param>
/// <returns>Цветовое значение</returns>
//-------------------------------------------------------------------------------------
public static Color ToColor(this Color32 color_value)
{
const Single factor = 1.0f / 255.0f;
Color color = new Color();
color.r = (Single)(color_value.r) * factor;
color.g = (Single)(color_value.g) * factor;
color.b = (Single)(color_value.b) * factor;
color.a = (Single)(color_value.a) * factor;
return (color);
}
//-------------------------------------------------------------------------------------
/// <summary>
/// Преобразование к формату RGBA.
/// </summary>
/// <param name="color_value">Цветовое значение</param>
/// <returns>Цвет в формате RGBA</returns>
//-------------------------------------------------------------------------------------
public static Int32 ToRGBA(this Color color_value)
{
Int32 red = color_value.r >= 1.0f ? 0xff :
color_value.r <= 0.0f ? 0x00 : (Int32)(color_value.r * 255.0f + 0.5f);
Int32 green = color_value.g >= 1.0f ? 0xff :
color_value.g <= 0.0f ? 0x00 : (Int32)(color_value.g * 255.0f + 0.5f);
Int32 blue = color_value.b >= 1.0f ? 0xff :
color_value.b <= 0.0f ? 0x00 : (Int32)(color_value.b * 255.0f + 0.5f);
Int32 alpha = color_value.a >= 1.0f ? 0xff :
color_value.a <= 0.0f ? 0x00 : (Int32)(color_value.a * 255.0f + 0.5f);
return ((Int32)((red << 24) | (green << 16) | (blue << 8) | alpha));
}
//-------------------------------------------------------------------------------------
/// <summary>
/// Преобразование к 32-битному цветовому значению.
/// </summary>
/// <param name="color_value">Цветовое значение</param>
/// <returns>32-битное цветовое значение</returns>
//-------------------------------------------------------------------------------------
public static Color32 ToColor32(this Color color_value)
{
const Single factor = 255.0f;
Color32 color = new Color32();
color.r = (Byte)((color_value.r) * factor);
color.g = (Byte)((color_value.g) * factor);
color.b = (Byte)((color_value.b) * factor);
color.a = (Byte)((color_value.a) * factor);
return (color);
}
//-------------------------------------------------------------------------------------
/// <summary>
/// Получение макимальной длины стороны ограничивающего объема.
/// </summary>
/// <param name="bounds">Ограничивающий объем</param>
/// <returns>Максимальная длина строны</returns>
//-------------------------------------------------------------------------------------
public static Single GetMaxExtents(this Bounds bounds)
{
if (bounds.extents.x >= bounds.extents.y && bounds.extents.x >= bounds.extents.z)
{
return (bounds.extents.x);
}
else
{
if (bounds.extents.y >= bounds.extents.x && bounds.extents.y >= bounds.extents.z)
{
return (bounds.extents.y);
}
else
{
return (bounds.extents.z);
}
}
}
}
Re: Color.Transparent ннадо
Добавлено:
26 окт 2012, 19:10
Acrobat
Извините я не совсем правильно выразился. Можете сделать этот трюк для класса Color? Кстати это даже не класс, а структура.
Re: Color.Transparent ннадо
Добавлено:
26 окт 2012, 19:21
DanielDem
Да, вот, если я правильно понял вашу мысль
Используется csharp
public static class XCoreExtension
{
public static Color Transparent(this Color color)
{
Color color_value = new Color(color.r, color.g, color.b, 0.0f);
return (color_value);
}
}
Только, теорию все равно лучше почитать
Re: Color.Transparent ннадо
Добавлено:
27 окт 2012, 17:54
Acrobat
Компилится, но не работает.
Похоже все дело в том что Color это структура. Метод расширения работает через такую штуку как this. Вот если бы Color бьл классом, то такая фишка прокатила бы.
Re: Color.Transparent ннадо
Добавлено:
28 окт 2012, 18:09
DanielDem
Метод расширения работает через такую штуку как this.
,
...нда, тяжко с такими знаниями лезть куда-то глубже в скрипты на C#
Код рабочий и действующий на 110%