Unity3D

Образование

Добрый день, Друзья.

Если Ваше приложение для мобильного устройства, то при переходе в inputbox, автоматически открывается родное приложение клавиатуры.

Но я столкнулся с проблемой при разработке приложения для тач-скрина на платформе windows.

Теоретически, экранная клавиатура в нем есть и я вначале использовал системный вызов, подсмотренный здесь:

    public void ShowTouchKeyboard()
    {
        ExternalCall("C:\\Program Files\\Common Files\\Microsoft Shared\\ink\\tabtip.exe", null, false);
    }
 

или

    public void ShowOnScreenKeyboard()
    {
        if (_onScreenKeyboardProcess == null || _onScreenKeyboardProcess.HasExited)
            _onScreenKeyboardProcess = ExternalCall("OSK", null, false);
    }

Но столкнулся с тем, что она периодически глючила - либо не появлялась, либо залипали кнопки, в связи с этим было решено набросать свой Prefab для Unity, более того, выложил его в assetstore (об этом возможно отдельную статью напишу позже).

Asset бесплатный, скачивайте и пользуйтесь на здоровье:

https://assetstore.unity.com/packages/tools/input-management/osk-onscreenkeyboard-rus-eng-148532

Добрый день.

В продолжение темы об отправке Email из Unity на C#

Универсальное решение для всех почтовых клиентов подсмотрел здесь.

 

public static void SendMessageWithEmbeddedImages()
{
  string htmlMessage = @"<html>
                         <body>
                         <img src='cid:EmbeddedContent_1' />
                         </body>
                         </html>";
  SmtpClient client = new SmtpClient("mail.server.com");
  MailMessage msg = new MailMessage("Адрес электронной почты защищен от спам-ботов. Для просмотра адреса в вашем браузере должен быть включен Javascript.",
                                    "Адрес электронной почты защищен от спам-ботов. Для просмотра адреса в вашем браузере должен быть включен Javascript.");
  // Создаем HTML view
  AlternateView htmlView = AlternateView.CreateAlternateViewFromString(
                                               htmlMessage,
                                               Encoding.UTF8,
                                               MediaTypeNames.Text.Html);
  // Создаем текстовую альтернативу для почтовых клиентов, не поддерживающих HTML
  AlternateView plainView = AlternateView.CreateAlternateViewFromString(
                                              Regex.Replace(htmlMessage,
                                                            "<[^>]+?>",
                                                            string.Empty),
                                              Encoding.UTF8,
                                              MediaTypeNames.Text.Plain);
  string mediaType = MediaTypeNames.Image.Jpeg;
  LinkedResource img = new LinkedResource(@"C:\Images\MyImage.jpg", mediaType);
  // Обязательно установите все эти значения!!!
  img.ContentId = "EmbeddedContent_1";
  img.ContentType.MediaType = mediaType;
  img.TransferEncoding = TransferEncoding.Base64;
  img.ContentType.Name = img.ContentId;
  img.ContentLink = new Uri("cid:" + img.ContentId);
  htmlView.LinkedResources.Add(img);
  //////////////////////////////////////////////////////////////
  msg.AlternateViews.Add(plainView);
  msg.AlternateViews.Add(htmlView);
  msg.IsBodyHtml = true;
  msg.Subject = "Some subject";
  client.Send(msg);
}

Создавая пользовательский интерфейс, понадобилось добавить эффект салюта.

Создавал его с помощью Particles, но при запуске приложения - частиц не видно.

Выхода два:

1) Скачать asset, упрощающий добавление эффектов в UI отсюда.

Посмотреть как это работает, можно здесь.

2) В свойствах Canvas установить Render Mode: Screen Space - Camera, а в Render Camera выбрать Вашу камеру. Тогда Canvas встроится в отображение камеры и таким образом будет видны эффекты частиц.

Подробнее здесь.

Понадобилась в приложении достаточно сложная анимация с бликом на кнопке, наподобие этого.

Но средствами unity реализовать достаточно тяжело (нужно писать шейдеры)

Решено было сделать это в другой программе, вывести видеофайл и вставить в приложение.

Оказалось тоже не все так просто. Unity3D поддерживает альфа-канал или прозрачность только в Apple ProRes 4444 Codec или Webm with VP8 

Подробнее здесь.

Пришлось сконвертировать готовый видеофайл с альфа-каналом с помощью бесплатного конвертера Format Factory в WebM, после чего на свойствах видео появилась возможность поставить галку "Keep Alpha"

Таким образом видео стало с прозрачными областями и его получилось поставить на кнопку.