Jump to content
Unity Insider Forum

GameObjects kopieren


peachplayer

Recommended Posts

Hallo zusammen

 

Ich möchte GameObjects kopieren, sodass eine rechteckige Fläche entsteht, d.h. es sollte ein Maisfeld geben.

 

Habe es mit folgendem Code probiert:


using UnityEngine;
using System.Collections;


public class Objekte_kopieren : MonoBehaviour {


public int i;
public GameObject[] prefab;
public GameObject field;
public int abstand = 3;

// Use this for initialization
void Start () {



	for (i = 0; i < 100; i++)
	{
		prefab[i] = Instantiate(field) as GameObject;
		Instantiate(prefab[i], new Vector3(i * 2.0F, 0, 0), Quaternion.identity);
		prefab[i].transform.localPosition = new Vector3(-200, 0, (i * abstand));
		prefab[i].name = "Mais" + i;

	}



}

// Update is called once per frame
void Update () {

}
}

 

Kann mir jemand helfen?

 

Gruss peachplayer

Link zu diesem Kommentar
Auf anderen Seiten teilen

Was funktioniert denn nicht?

Ich sehe jedenfalls, dass du dein Array von GameObjects noch initialisieren solltest:

GameObject[] prefab = new GameObject[100];

for (i = 0; i < 100; i++)

...

 

und dann macht wohl eher das hier Sinn:

GameObject[] prefab = new GameObject[100];
for (i = 0; i < 100; i++)
 {
  prefab[i] = Instantiate(field, new Vector3(i * 2.0F, 0, 0), Quaternion.identity);						
  prefab[i].transform.localPosition = new Vector3(-200, 0, (i * abstand));
  prefab[i].name = "Mais" + i;				  
 }

Link zu diesem Kommentar
Auf anderen Seiten teilen

prefab[i] = (GameObject)Instantiate(field, new Vector3(i * 2.0F, 0, 0), Quaternion.identity);
prefab[i] = Instantiate(field, new Vector3(i * 2.0F, 0, 0), Quaternion.identity) as GameObject;

versuch mal ein von den beiden dann sollte die Fehlermeldung verschwinden, wenn es die ist, an die ich denke.

Link zu diesem Kommentar
Auf anderen Seiten teilen

Falls dir so etwas vorschwebt wie im unten angehängten Bild (nur eben mit Mais), dann hätte ich da was für dich.

Das Wichtigste zuerst:

1. Dein Prefab ist auch ein prefab

2. Die Werte im Inspektor haben wohl Vorrang vor den definierten im Werten im Script. Falls dort, im Script, die Werte für public-Werte geändert werden und es nicht klappt, könnte es daran liegen, dass im Inspector noch andere Werte stehen. Etwas, dass ich auch sehr gerne vergesse.

 

Nun das Script:

 

using UnityEngine;
using System.Collections;
public class LoadPrefabs : MonoBehaviour
{
public GameObject prefabHaus;
public GameObject[] field = new GameObject[120];
void Start()
{
 float offsetX = 30f;
 float offsetZ = 10f;
 float abstandX = 20f;
 float abstandZ = 25f;
 int x; // einfache Zaehlvariable
 int z; // einfache Zaehlvariable
 int k; // einfache Zaehlvariable
 float newX;
 float newZ;
 for (z = 0; z < 10; z++)
 {
  for (x = 0; x < 12; x++)
  {
k = z * 12 + x;
newX = offsetX + x * abstandX;
newZ = offsetZ + z * abstandZ;
field[k] = Instantiate(prefabHaus, new Vector3(newX, 1f, newZ), Quaternion.identity) as GameObject;
field[k].name = "Haus " + k;
Debug.Log(field[k].name + " an Position " + newX + " : " + newZ);
  }
 }
}
}

 

Das Prefab muss du im Inspector auf das entsprechende Feld ziehen.

Ja, das war's eigentlich schon :)

 

post-6127-0-52872800-1477418064_thumb.jpg

Link zu diesem Kommentar
Auf anderen Seiten teilen

Falls dir so etwas vorschwebt wie im unten angehängten Bild (nur eben mit Mais), dann hätte ich da was für dich.

Das Wichtigste zuerst:

1. Dein Prefab ist auch ein prefab

2. Die Werte im Inspektor haben wohl Vorrang vor den definierten im Werten im Script. Falls dort, im Script, die Werte für public-Werte geändert werden und es nicht klappt, könnte es daran liegen, dass im Inspector noch andere Werte stehen. Etwas, dass ich auch sehr gerne vergesse.

 

Nun das Script:

 

using UnityEngine;
using System.Collections;
public class LoadPrefabs : MonoBehaviour
{
public GameObject prefabHaus;
public GameObject[] field = new GameObject[120];
void Start()
{
 float offsetX = 30f;
 float offsetZ = 10f;
 float abstandX = 20f;
 float abstandZ = 25f;
 int x; // einfache Zaehlvariable
 int z; // einfache Zaehlvariable
 int k; // einfache Zaehlvariable
 float newX;
 float newZ;
 for (z = 0; z < 10; z++)
 {
  for (x = 0; x < 12; x++)
  {
k = z * 12 + x;
newX = offsetX + x * abstandX;
newZ = offsetZ + z * abstandZ;
field[k] = Instantiate(prefabHaus, new Vector3(newX, 1f, newZ), Quaternion.identity) as GameObject;
field[k].name = "Haus " + k;
Debug.Log(field[k].name + " an Position " + newX + " : " + newZ);
  }
 }
}
}

 

Das Prefab muss du im Inspector auf das entsprechende Feld ziehen.

Ja, das war's eigentlich schon :)

 

post-6127-0-52872800-1477418064_thumb.jpg

Ganz herzlichen Dank Ikarus!

Das hat wunderbar geklappt!

Siehe Bild unten!

 

Gruss peachplayer

post-5336-0-69841700-1477421595_thumb.jpg

Link zu diesem Kommentar
Auf anderen Seiten teilen

Archiviert

Dieses Thema ist jetzt archiviert und für weitere Antworten gesperrt.

×
×
  • Neu erstellen...