GUI надпись над 3д объектом

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

GUI надпись над 3д объектом

Сообщение Avatarchik 13 сен 2010, 00:26

Увидел на другом форуме созрел такой вопрос, вот и решение :D

Синтаксис:
Используется csharp
using UnityEngine;

public class GUIname : MonoBehaviour
{
    void OnGUI()
    {
        Vector3 screenPosition = Camera.main.WorldToScreenPoint(gameObject.transform.position);
        Vector3 cameraRelative = Camera.main.transform.InverseTransformPoint(transform.position);
        if (cameraRelative.z > 0)
        {
            Rect position = new Rect(screenPosition.x, Screen.height - screenPosition.y, 100f, 20f);
            GUI.Label(position, "Avatarchik");
        }
    }
}  
Последний раз редактировалось Avatarchik 13 сен 2010, 00:42, всего редактировалось 1 раз.
Добавить ava-karaban в Skype
Аватара пользователя
Avatarchik
UNITрон
 
Сообщения: 274
Зарегистрирован: 04 апр 2009, 15:36
Откуда: Украина(Донецк)
  • ICQ

Re: GUI надпись над 3д объектом

Сообщение Neodrop 13 сен 2010, 00:29

Тут есть упущение. Если объект позади камеры, то тоже надпись отобразиться. Нужно ещё учитывать относительное положение объекта по локальной Z оси камеры.
Добавить neodrop в Skype
Изображение
"Спасибо!" нашему порталу, вы сможете сказать ЗДЕСЬ.
Если проблема не решается честно, нужно её обмануть! || Per stupiditas at Astra!
Страх порождает слабость. Бесстрашных поражают пули.
Протратившись на блядях байтах, на битах не экономят.
Аватара пользователя
Neodrop
Админ
 
Сообщения: 8480
Зарегистрирован: 08 окт 2008, 15:42
Откуда: Питер
Skype: neodrop
  • Сайт

Re: GUI надпись над 3д объектом

Сообщение Avatarchik 13 сен 2010, 00:43

Спс,поправил :D
Добавить ava-karaban в Skype
Аватара пользователя
Avatarchik
UNITрон
 
Сообщения: 274
Зарегистрирован: 04 апр 2009, 15:36
Откуда: Украина(Донецк)
  • ICQ

Re: GUI надпись над 3д объектом

Сообщение crocodile 01 ноя 2010, 09:15

Использую для отображения здоровья:
Код: Выделить всё
function OnGUI()
{
   if(!full_lives)
   {
      var screenPosition : Vector3 = Camera.main.WorldToScreenPoint(gameObject.transform.position);
      var cameraRelative : Vector3 = Camera.main.transform.InverseTransformPoint(transform.position);
      if (cameraRelative.z > 0)
      {
         width = 20 * lives_count/lives;
         var rect = new Rect(screenPosition.x-10, Screen.height - screenPosition.y-15, width, 2);
         if(!texture_lives)
         {
            Debug.LogError("Assign a Texture in the inspector.");
            return;
         }
         GUI.DrawTexture(rect, texture_lives, ScaleMode.ScaleToFit, false, 0);
      }
   }
}

Есть ли более элегантный способ поровнять полоску здоровья относительно объекта.
И еще она мигает и частенько пропадает. Как это исправить?

Может это вообще можно решить по другому?
crocodile
UNец
 
Сообщения: 21
Зарегистрирован: 15 окт 2010, 13:05
  • ICQ

Re: GUI надпись над 3д объектом

Сообщение GrueGames 01 ноя 2010, 09:19

Зачем все это. Намного проще отобразить полоску текстурой на прямоугольном полигоне, привязанным к объекту, ориентированным на камеру, а его рендер, если это требуется, вывести на слой эффектов, рендерящийся поверх основной камеры, который у вас все равно обязательно будет.
Аватара пользователя
GrueGames
UNITрон
 
Сообщения: 200
Зарегистрирован: 11 апр 2009, 16:42
Откуда: Samara, Russia
  • Сайт
  • ICQ


Вернуться в Исходники (Копилка)

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

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