2015-02-01 3 views
0

Привет, ниже код, когда мой персонаж перемещается, и два или более объекта попадают в поле зрения raycast, элемент GUI перекрывает их имя. Я пробовал много вариантов GUI, но не удалось, пожалуйста, скажите мне, что может быть правильным.Наложение текста GUI

using UnityEngine; 
using System.Collections; 

public class rayss : MonoBehaviour 
{ 
FOV2DEyes eyes; 
FOV2DVisionCone visionCone; 
float speed = -5; 
RaycastHit hit; 
RaycastHit[] objects ; 
void Start() 
{ 
    eyes = GetComponentInChildren<FOV2DEyes>(); 
    visionCone = GetComponentInChildren<FOV2DVisionCone>(); 


} 

void FixedUpdate() 
{ 

    if (transform.position.x < -10 || transform.position.x > 10) 
    { 
     speed *= -1; 
    } 

    transform.position = new Vector3(transform.position.x + speed * Time.fixedDeltaTime, transform.position.y, transform.position.z); 
} 



void Update() 
{ 
    objects = new RaycastHit[eyes.hits.Count]; 



    int i = 0; 
    foreach (RaycastHit hit in eyes.hits) 
    { 
     if (hit.transform) 
     { 
      objects[i] =hit ; 
      i++; 
     } 

    } 

} 




void OnGUI() 
{ 

    foreach (RaycastHit hit in objects) 
    { 


     GUI.Label(new Rect(40, 25, 100, 40), hit.collider.gameObject.name); 

    } 


} 

}

+0

Я бы порекомендовал вам отладить код и оценить значения переменных и посмотреть, что-то отличное от необычного. – MethodMan

+0

Ваш GUI.Label (новый Rect (40, 25, 100, 40), hit.collider.gameObject.name); имеет фиксированный прямоугольник Rectangle. Итак, все имя отображается в этом фиксированном положении экрана. Попробуйте динамические значения там, которые будут изменяться для каждого игрового объекта в вашем foreach (RaycastHit hit in objects) {...}. –

ответ

0

Это просто OnGUI вы можете изменить свой код на этот:

void OnGUI() 
{ 
    float yHeight = 25; 
    foreach (RaycastHit hit in objects) 
    { 
     GUI.Label(new Rect(40, yHeight, 100, 40), hit.collider.gameObject.name); 
     yHeight += 40 + 5// Label Height + some padding 
    } 
} 

Если список объектов слишком много вам нужно добавить вид прокрутки Как this.

+0

спасибо большое Барис это работает но небольшая проблема пришла он печатает 1 объект слишком много раз, я думаю, из-за обновления после каждого кадра Я добавляю команду печати, чтобы видеть. Если 2 объекта входят в raycast, он печатает 28 раз имя первого объекта и 28 раз второе – Anas

+0

Возможно ли, что графический интерфейс отобразит имя один раз за событие? – Anas

+0

Я думаю, что это алгоритмическая проблема. в списке объектов есть 27 дублированных объектов как объекта 1, так и 2. Я думаю, вам нужно очистить свой список в FOV2DEyes. –