rotbartdesign.berlin Geschrieben 26. August 2012 Melden Share Geschrieben 26. August 2012 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 More sharing options...
AgentCodeMonk Geschrieben 27. August 2012 Melden Share Geschrieben 27. August 2012 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 More sharing options...
rotbartdesign.berlin Geschrieben 28. August 2012 Autor Melden Share Geschrieben 28. August 2012 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 More sharing options...
Recommended Posts
Archiviert
Dieses Thema ist jetzt archiviert und für weitere Antworten gesperrt.