Color.Transparent ннадо

Здесь можно задать свои вопросы напрямую разработчикам Unity3D

Color.Transparent ннадо

Сообщение Acrobat 26 окт 2012, 11:17

Здравствуйте!
Надо в класс Color вот такую штуку сделать Color.Transparent.
RGBA is (1, 1, 1, 0).
Очень часто используется в разработке. А то приходиться постоянно "new Color(1,1,1,0)" писать.
Acrobat
UNITрон
 
Сообщения: 182
Зарегистрирован: 08 дек 2011, 16:16
Откуда: г. Нижний Новгород

Re: Color.Transparent ннадо

Сообщение DanielDem 26 окт 2012, 18:42

Это сделать можно с помощь методов расширений класса
Да прибудет с Вами сила...
Аватара пользователя
DanielDem
UNITрон
 
Сообщения: 174
Зарегистрирован: 07 янв 2010, 13:27
Откуда: Россия
  • ICQ

Re: Color.Transparent ннадо

Сообщение Acrobat 26 окт 2012, 18:54

DanielDem писал(а):Это сделать можно с помощь методов расширений класса

можно пример?
Acrobat
UNITрон
 
Сообщения: 182
Зарегистрирован: 08 дек 2011, 16:16
Откуда: г. Нижний Новгород

Re: Color.Transparent ннадо

Сообщение DanielDem 26 окт 2012, 19:03

Да, пожалуйста(пример из моего проекта):
А про методы расширения 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);
                                        }
                                }
                        }
}
 
Да прибудет с Вами сила...
Аватара пользователя
DanielDem
UNITрон
 
Сообщения: 174
Зарегистрирован: 07 янв 2010, 13:27
Откуда: Россия
  • ICQ

Re: Color.Transparent ннадо

Сообщение Acrobat 26 окт 2012, 19:10

Извините я не совсем правильно выразился. Можете сделать этот трюк для класса Color? Кстати это даже не класс, а структура.
Acrobat
UNITрон
 
Сообщения: 182
Зарегистрирован: 08 дек 2011, 16:16
Откуда: г. Нижний Новгород

Re: Color.Transparent ннадо

Сообщение DanielDem 26 окт 2012, 19:21

Да, вот, если я правильно понял вашу мысль

Синтаксис:
Используется 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);
                        }
}


Только, теорию все равно лучше почитать
Да прибудет с Вами сила...
Аватара пользователя
DanielDem
UNITрон
 
Сообщения: 174
Зарегистрирован: 07 янв 2010, 13:27
Откуда: Россия
  • ICQ

Re: Color.Transparent ннадо

Сообщение Acrobat 27 окт 2012, 17:54

Компилится, но не работает.
Похоже все дело в том что Color это структура. Метод расширения работает через такую штуку как this. Вот если бы Color бьл классом, то такая фишка прокатила бы.
Acrobat
UNITрон
 
Сообщения: 182
Зарегистрирован: 08 дек 2011, 16:16
Откуда: г. Нижний Новгород

Re: Color.Transparent ннадо

Сообщение DanielDem 28 окт 2012, 18:09

Метод расширения работает через такую штуку как this.
,
...нда, тяжко с такими знаниями лезть куда-то глубже в скрипты на C#
Код рабочий и действующий на 110%
Да прибудет с Вами сила...
Аватара пользователя
DanielDem
UNITрон
 
Сообщения: 174
Зарегистрирован: 07 янв 2010, 13:27
Откуда: Россия
  • ICQ


Вернуться в Вопросы разработчикам движка

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 2