Jump to content
Unity Insider Forum

Instantiate Clon soll folgen..


rotbartdesign.berlin

Recommended Posts

Ich möchte eine Art Drohne Spawnen.

Das zielen und der andere Kram klappt und ist als Prefab einsatzbereit

 

Die Drohne soll nur in einem bestimmten Modus sichtbar sein.

 

Also dachte ich Instantiate..

Leider will das nicht so recht weil ich etwas übersehe....

 

Der Spawnpoint ist dem Player untergeordnet und folgt ihm, an diesem möchte ich einige Distanzwaffe anbinden und dort einblenden/erzeugen.

 

Wenn ich in den Modus wechsele und instantiere, dann entseht ein Clon der Drohne

 

dieser Clon ist unabhängig vpm Spawnpoint und meine Frage ist, komme ich um das scripten der Verfolgung drumrum indem ich den Clon auch dem Player unterordnen kann?

 

hier mal der Code bisher

 

if(GameStatic.status == GameStatic.GameModus.DistanceMode)
{
 GameObject Distanzwaffe;
 Distanzwaffe = Instantiate(DistanzEqip,EquipSpawnpoint.position,gameObject.transform.rotation)as GameObject;
}

------------------------------------------------------------------------------------------------

Update:

 

Nichts zu wollen.

Das Problem ist mir klar, nur dessen Lösung noch far away:

Ich habe eine Kuge(drohne)

Diese Drohne hat ein Script das Sie zielen und schießen läßt wenn der GameModus es erlaubt.

Der Player hat in seiner Struktur ein leeres Gameobjekt an dem die Distanzgeschichten angeheftet werden sollen

Die Drohne hat eine FolgeMir Funktion und diese funktiert wenn diese in der Szene normal vorhanden ist

gespeichert als Prefab aber verliert sie NUR den Punkt an dem Sie spawnen soll.

dadurch wird instanziert aber sie folgt nich

 

Was kann ich tun um alles im Script so an das Prefab weiterzugeben das der Transform auch drinbleibt?

er ist im übrigen als einziges dickgedruckt..

 

 

Die Drohne

 

//Mein Ray
Vector3 myRay;
//Hitpoint
RaycastHit hit;
//Spawnpoint Projektil
public Transform WURF_spawnpoint;
//das Projektil
public GameObject Patrone;
//Beschleunigungs-Anpassung
public int RiggidForce;
//eigene Position
private Transform myTransform;
//zu folgende Position
public Transform follow;
//Audioclips
public AudioClip FIRE_gun;
public AudioClip Movement;
private bool MovementSound = false;
//Objekt der Zielposition
GameObject FollowTarget;

// Use this for initialization
void Start ()
{
 myTransform = transform;
 follow = FollowTarget.transform;
}

// Update is called once per frame
void Update ()
{
  myTransform = transform;
  Vector3 delta = hit.point;
  transform.LookAt(delta);
  myTransform.position = follow.position;

  //---RAYCASTING--- zur Ermittlung der Cursorposition
	 Ray ray = Camera.main.ScreenPointToRay(Input.mousePosition);
	 Physics.Raycast(Camera.main.transform.position, ray.direction,out hit, 1000f);
  Debug.Log(hit.point);

  if(Input.GetKeyDown(KeyCode.Mouse0))
  {
Schießen();
  }

 renderer.enabled = false;
}
void Schießen()
 {
  if(GameStatic.status == GameStatic.GameModus.DistanceMode)
{
 GameObject Pat;
 Pat = Instantiate(Patrone,WURF_spawnpoint.position,gameObject.transform.rotation)as GameObject;
 Pat.rigidbody.AddRelativeForce(Vector3.forward * RiggidForce);
 audio.PlayOneShot(FIRE_gun);
 Destroy(Pat,5);
}
 }
}

 

Der Spawn

 

 

if(GameStatic.status == GameStatic.GameModus.DistanceMode)
{
 if(einmalig == false)
 {
  GameObject Distanzwaffe;
  Distanzwaffe = Instantiate(DistanzEqip,EquipSpawnpoint.position,gameObject.transform.rotation)as GameObject;
  einmalig = true;
 }

}

 

NEW EDIT

 

Einfaches Script, aufgeteilt auf Spawn und Motion, in der Hoffnung es hilft.

Dozent bekommt es auch nicht geregelt (hämisch grinsen oder weinen?).

 

Motion:

DER FOLLOW => Prefab vorher in der Szene ohne Spawn
=>  Code geht, Objekt kommt mit...reicht aus!
using UnityEngine;
using System.Collections;
public class TESTS : MonoBehaviour
{

private Transform myTransform;
public Transform follow;
GameObject FollowTarget;

// Use this for initialization
void Start ()
{
 myTransform = transform;
 follow = FollowTarget.transform;

}

// Update is called once per frame
void Update ()
{
  myTransform.position = follow.position;
}

}

 

Wenn ich das GameObject nun als Prefab anlege geht mir der Follow verloren und ich kann in im Projektprefab nur ansehen aber nicht ändern.

Wenn ich das Item als Prefab generiere dann wird Follow Eintrag fettgedruckt im Inspektor, im Prefab verschwindet er...

Aufbau:

Player => an Player angeheftet leeres GameObjekt => als Spawnhalterung für Distanzwaffen

Spawnitem => soll an Spawnhalterung gespawnt werden => soll an der Halterung bleiben und dessen Postion übernehmen

 

habe festgestellt das die Spawnhalterung eigene Koordinaten hat, beim Dozenten hat Sie aber die vom Player wegen Unterordnung....

 

keinen Plan weiter

Link zu diesem Kommentar
Auf anderen Seiten teilen

kurze frage, "wer" spawnt was? spawnt der spieler die drone? dann müsste der spieler das objekt "kennen" (zb den pfad zum sp).

...irgendwie klingts als würdest du VLT das FollowTarget im dronenscript beim start mit null überschreiben...kann das sein?

// Use this for initialization
void Start ()
{
 follow = FollowTarget.transform;
}

 

...ist anfangs eindeutig NICHT initialisiert weder follow noch FollowTarget -->... also null...klar, dass sie kein ziel hat dem sie folgen kann.

ich sehe auch nirgends, dass du wirklich ein ziel gibtst...falls du das doch machst, wirds definitiv irgendwie überschrieben mit null. garantiert.

follow = FollowTarget.transform; kommt zwar, aber was ist FollowTarget? wo wird es gesetzt?

 

möglich wäre sowas:

 

GameObject Distanzwaffe;
	 Distanzwaffe = Instantiate(DistanzEqip,EquipSpawnpoint.position,gameObject.transform.rotation)as GameObject;
Distanzwaffe .GetComponent>DEIN_DRONESCRIPT>().FollowTarget = irgendeinGO;

oder gib der drone eine
public void SetFollowTarget (Transform _ft)
{
FollowTarget = _ft;
follow  = FollowTarget.transform; // ist dann irgendwie überflüssig...aber da ich nicht weiß wie der rest aussieht und wie es gebraucht wird
}

 

und dann:

GameObject Distanzwaffe;
	 Distanzwaffe = Instantiate(DistanzEqip,EquipSpawnpoint.position,gameObject.transform.rotation)as GameObject;
Distanzwaffe .GetComponent>DEIN_DRONESCRIPT>().SetFollowTarget(TARGET_GO); // was immer dein follow target ist

 

und natürlich

void Start ()
{
 myTransform = transform;
 //follow = FollowTarget.transform;

 

in der update:

 

void Update()

{

if (follow == null)

{

Debug.LoWarning("!!!!!!ICH HABE KEIN ZIEL!!!!!!!");

return;

}

//....rest

}

...so würde ich das erstmal testen... wenns dann nicht klappt, dann zeig mal her das gedönse;)

Link zu diesem Kommentar
Auf anderen Seiten teilen

das hatte ich so gesetzt

public Transform;

im Inspector dann zugewiesen

ich habe beide scripte getrennt nun nach spawn und drohnenverhalten selber und nun gehts

 

der fehler lag AUCH darin das warum auch immer mein leeres Gameobjekt als Halterung für die verschiedenen Drohnen eigene Koordinaten hatte obwohl es ein child vom Player is...

 

beim Debug haben wir das dann festgestellt

 

nun geht es. waren irgendwie nur 3 zeilen code...

kann bei Bedarf gerne abgeben was ich geschrieben hab.

Wenn ich beides in ein Script schreibe gehts wieder nich..

liegt aber sicher an meinem Projekt, vielleicht sollte ich nicht zu viel rumtesten.....aber nur so lernt mans...

 

Danke vielmals für Deinen Lösungsansatz, hat prima geholfen, ich konnte nochmal vergleichen mit dem was ich vom Ablauf her verstanden hatte...

Link zu diesem Kommentar
Auf anderen Seiten teilen

Archiviert

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

×
×
  • Neu erstellen...