Jump to content
Unity Insider Forum
peachplayer

GameObjects kopieren

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

Share this post


Link to post
Share on other sites

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;				  
 }

Share this post


Link to post
Share on other sites

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.

Share this post


Link to post
Share on other sites

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

Share this post


Link to post
Share on other sites

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

  • Like 1

Share this post


Link to post
Share on other sites

weil sonst leider eine Fehlermeldung kommt!

"Warum hast du dein Haus angezündet?"

"Weil mir die Vorhänge nicht gefallen haben!"

 

Nicht einfach irgendetwas machen, bis der Fehler weg ist, sondern herausfinden und verstehen, was die Fehlermeldung verursacht ;)

  • Like 4

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now

×