Skocz do zawartości
  • 👋 Witaj na MPCForum!

    Przeglądasz forum jako gość, co oznacza, że wiele świetnych funkcji jest jeszcze przed Tobą! 😎

    • Pełny dostęp do działów i ukrytych treści
    • Możliwość pisania i odpowiadania w tematach
    • System prywatnych wiadomości
    • Zbieranie reputacji i rozwijanie swojego profilu
    • Członkostwo w jednej z największych społeczności graczy

    👉 Dołączenie zajmie Ci mniej niż minutę – a zyskasz znacznie więcej!

    Zarejestruj się teraz

Zmiana GUI Unity3D


Rekomendowane odpowiedzi

Opublikowano

*

*

*

*

*

*

*

*

*

*

*

*

*

*

*

*

 

 

Witam witam, znowu ja :P Mam pytanie odnośnie GUI a dokładnie licznika FPS, owy licznik już posiadam wygląda tak:
 

http://scr.hu/356b/18gpa
Tutaj się rodzi pytanie, potrzebuję aby ktoś mi pomógł:

 
void OnGUI()
{
// Copy the default label skin, change the color and the alignement
if( style == null ){
style = new GUIStyle( GUI.skin.box );
style.normal.textColor = Color.white;
style.alignment = TextAnchor.MiddleCenter;
}
 
GUI.color = updateColor ? color : Color.white;
startRect = GUI.Window(0, startRect, DoMyWindow, "");

 

 

 

 

co powinienem tu zmienić aby pozbyć się tego zielonego tła, tzn. żeby pojawiły się sam cyferki ? :/

 

Dla potrzeby podam także cały skrypt:

 

 

 

using UnityEngine;

using System.Collections;
 
[AddComponentMenu( "Utilities/HUDFPS")]
public class LicznikFPS : MonoBehaviour
{
 
 
public Rect startRect = new Rect( 10, 10, 75, 50 ); 
public bool updateColor = true; 
public bool allowDrag = true; 
public  float frequency = 0.5F; 
public int nbDecimal = 1; 
 
private float accum   = 0f;
private int   frames  = 0;
private Color color = Color.white;
private string sFPS = ""; 
private GUIStyle style; 
 
void Start()
{
StartCoroutine( FPS() );
}
 
void Update()
{
accum += Time.timeScale/ Time.deltaTime;
++frames;
}
 
IEnumerator FPS()
{
 
while( true )
{
// Update the FPS
float fps = accum/frames;
sFPS = fps.ToString( "f" + Mathf.Clamp( nbDecimal, 0, 10 ) );
 
//Update the color
color = (fps >= 30) ? Color.green : ((fps > 10) ? Color.red : Color.yellow);
 
accum = 0.0F;
frames = 0;
 
yield return new WaitForSeconds( frequency );
}
}
 
void OnGUI()
{
 
if( style == null ){
style = new GUIStyle( GUI.skin.box );
style.normal.textColor = Color.white;
style.alignment = TextAnchor.MiddleCenter;
}
 
GUI.color = updateColor ? color : Color.white;
startRect = GUI.Window(0, startRect, DoMyWindow, "");
}
 
void DoMyWindow(int windowID)
{
GUI.Label( new Rect(0, 0, startRect.width, startRect.height), sFPS + " FPS", style );
if( allowDrag ) GUI.DragWindow(new Rect(0, 0, Screen.width, Screen.height));
}
}

 

 

1390144171-U592769.png


 

Opublikowano

Albo ustaw transparentną texturę jako tło okna, albo nie używaj okien i wyświetlaj liczbę FPSów w samym labelu.

Jak chcesz wyświetlić to w samym labelu to stwórz nowy Label poniższą metodą:

GUI.Label(new Rect(x, y, w, h), "FPS: "+sFPS); //
/* x - pozycja X labela; y - pozycja Y labela; w - szerokosc; h - wysokosc; */

Oczywiście kod musi znaleźć się w metodzie OnGUI.

Mam nadzieję, że nie sklejasz gry z gotowców tylko analizujesz projekt by się na nim pouczyć tworzyć gry w Unity.

  • 2 tygodnie później...
Opublikowano

Trochę późna odpowiedź ale co tam :P

@Danieo199

 

Biorę gotowce jeżeli naprawdę nie wiem co mam ze sobą zrobić, poza tym zbieram także gotowce i edytuję je na własne potrzeby, przerabiam, dodaje i odejmuję :)

 

 

A co do twojego postu, podmieniłem to w void OnGUI i efekt jest taki:
 


Dzięki za pomoc ^^, będę łaskawy i dam lajka xD, teraz tylko pozostało zmienić kolor napisu :) Ale z tym to już raczej sam sobie poradze :)

1390144171-U592769.png


 

  • 1 miesiąc temu...
Opublikowano

Trochę późna odpowiedź ale proszę..

 

Licznik FPS:

#pragma strict
 
var updateInterval = 0.5;
 
private var accum = 0.0; 
private var frames = 0; 
private var timeleft : float; 
 
function Start()
{
    if( !guiText )
    {
        print ("K***a! GUIText zapomniales dodac!");
        enabled = false;
        return;
    }
    timeleft = updateInterval;  
}
 
function Update()
{
    timeleft -= Time.deltaTime;
    accum += Time.timeScale/Time.deltaTime;
    ++frames;
    
    if( timeleft <= 0.0 )
    {
        guiText.text = "" + (accum/frames).ToString("f2");
        timeleft = updateInterval;
        accum = 0.0;
        frames = 0;
    }
}

Dodaj ten skrypt do GUIText.

Zarchiwizowany

Ten temat przebywa obecnie w archiwum. Dodawanie nowych odpowiedzi zostało zablokowane.

×
×
  • Dodaj nową pozycję...