2016-07-02 9 views
0

Ich und meine Freunde versuchen, ein Spiel auf dem Android zu entwickeln, und wir versuchen unser Bestes, um die Verzögerung zu reduzieren.Render GameObject nur, wenn sie in der Nähe der Controller/Kamera sind

Können Objekte nur gerendert werden, wenn sie sich in der Nähe des Controllers befinden?

Wir haben diese Insel, also hat es viele Bäume in der Szene.

Wir sind immer noch ziemlich neu in Unity. Wenn es möglich ist, wie? Vielen Dank.

+0

Es ist völlig unvorstellbar, dass Sie sich um die Leistung sorgen müssen. Es ist absolut kein Problem. Beachten Sie, dass Unity * vollautomatisch * alles für Sie aussortiert. – Fattie

+0

Obwohl das, was du sagst, wahr ist, bekommen wir immer noch einen fps um 20-40 während des Spiels. Ich teste es auf einem Z3 compact. – carlolol

+0

warten - Bäume ?? sicherlich benutzen Sie ** Unity's Terrain-System ** - oder? Es ist unglaublich effizient. Im Wesentlichen können Sie "Ihre eigenen Bäume nicht bilden"!?!? Machst du Bäume manuell? – Fattie

Antwort

1

Sie können rthis auf zwei Arten tun.

.unity eingebaute in Level of Detail (LOD) ist die erste Lösung, die Sie for.Create mehrere 3D-Modelle für diejenigen Gameobject gehen sollte. Hochdetailliertes Objekt, mittleres Detail, gering detailliertes und wirklich sehr detailliertes Polygon.

Wenn Sie weit von diesem Objekt entfernt sind, zeigt Unity nur das detailgetreue 3D-Modell an. Sobald Sie sich dem Objekt nähern, tauscht Unity das 3D-Modell automatisch gegen ein hochdetailliertes 3D-Modell aus. Dies verbessert das Gedächtnis und die Geschwindigkeit des Spiels. Um zu sehen, wie man das Google "Level of Detail Unity" einrichtet und die Videos ansieht oder Unity tutorial folgt. Es erfordert visuelle indem Renderer.enabled zu false

.another Lösung ist, den Abstand zwischen der Kamera zu überprüfen und die Gameobject Sie mit Vector3.Distance ausblenden möchten, dann verstecken sie durch die Renderer deaktivieren zu verstehen.

Unten ist ein vollständiger Arbeitscode für diese Methode. Fügen Sie einfach den folgenden Code an jeder der Bäume oder Mesh, die Sie ausblenden möchten, wenn weit weg von der Kamera. Sie können die Variable distanceToAppear an Ihre Bedürfnisse anpassen.

public class MeshMonitor : MonoBehaviour 
{ 
    Transform mainCamTransform; //Stores the FPS camera transform 
    private bool visible = true; 
    public float distanceToAppear = 8; 
    Renderer objRenderer; 

    void Start() 
    { 
     mainCamTransform = Camera.main.transform;//Get camera transform reference 
     objRenderer = gameObject.GetComponent<Renderer>(); //Get render reference 
    } 

    // Update is called once per frame 
    void Update() 
    { 
     disappearChecker(); 
    } 

    void disappearChecker() 
    { 
     float distance = Vector3.Distance(mainCamTransform.position, transform.position); 

     //We have reached the distance to Enable Object 
     if (distance < distanceToAppear) 
     { 
      if (!visible) 
      { 
       objRenderer.enabled = true;// Show Object 
       visible = true; 
       Debug.Log("Visible"); 
      } 
     } 

     else 
     { 
      if (visible) 
      { 
       objRenderer.enabled = false;// Hide Object 
       visible = false; 
       Debug.Log("InVisible"); 
      } 
     } 
    } 
} 
+1

Das ist, was ich mir vorgenommen habe und ich kann es einfach nicht in Einheit implementieren. Ich danke dir sehr! – carlolol

+0

hold it dude - nimmst du deine eigenen "manuellen" Bäume? !! Wie echte physische Bäume? – Fattie

+0

@JoeBlow Ich denke nicht, dass dieser Typ hier aktiv ist. Es wird Zeit brauchen, bis er reagiert. Um deine Frage zu beantworten, sieht es so aus, als ob er Mesh als Bäume benutzt. – Programmer