2015-02-01 3 views
0

안녕하십니까. 내 캐릭터가 움직이고 두 개 이상의 객체가 레이 캐스트의 필드에 들어올 때의 코드입니다. 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); 에는 고정 된 위치의 사각형이 있습니다. 그래서 모든 이름이 화면의 고정 된 위치에 표시됩니다. foreach (RaycastHit hit in objects) {...} 메소드의 각 game 객체에 대해 동적 값을 변경하십시오. –

답변

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

덕분에 Baris가 작동합니다. 작은 문제가 발생했습니다. 각 개체 뒤에 업데이트로 인해 1 개체가 너무 많이 인쇄됩니다. 인쇄 명령을 추가합니다. 두 개의 객체가 레이 캐스트에 포함되면 첫 번째 객체의 이름 28 번과 두 번째 객체의 28 번을 인쇄합니다. – Anas

+0

이벤트 당 한 번씩 GUI에 이름이 표시 될 수 있습니까? – Anas

+0

나는 그것이 알고리즘적인 문제라고 생각한다. 개체 목록에는 개체 1과 개체 2 모두 27 개의 개체가 있습니다. FOV2DEyes에서 목록을 지워야한다고 생각합니다. –