Sriel Geschrieben 28. Mai 2015 Melden Share Geschrieben 28. Mai 2015 Hey Leute mal ne Frage, mir ist folgendes aufgefallen und ich verstehe es nicht... Ich habe einen "Lenkraketen"-Script geschrieben, der Code hier untern funktioniert okay? habe den Transform rot markiert um den es geht. Vorher hatte ich nämlich den blau markierten Vector3 genutzt, es war die selbe Referenz zur Position des Spielers(Players)! Aber mit einem Vector3 funktioniert das Script nicht, mit dem Transform schon...warum?? using UnityEngine; using System.Collections; public class TentacleBossBullet : BulletSystem { /* BulletSystem-Variables Rigidbody bulletRigidbody; public float bulletSpeed; public int weaponDamage; public int damageModifier; protected Vector3 shotDirection; protected Vector3 playerTargetPosition; */ public float destructionAfterSeconds; public float rotationSpeed; Transform pTarget; public static bool bossPowerWeaponMode = false; public override void Awake() { !!!! base.Awake();=getcomponent rigidBody& FindByTag vector3 playerPosition!!!! weaponDamage = GameObject.FindGameObjectWithTag("BossTentacle").GetComponent<tentaclebossfight>().bossBulletDamage; damageModifier = GameObject.FindGameObjectWithTag("BossTentacle").GetComponent<tentaclebossfight>().bossBulletPowerDamageModifier; pTarget = GameObject.FindGameObjectWithTag("Player").transform; } public override void Start() { bulletRigidbody.velocity = Vector3.forward; } //Shot and selfdestruction after time void FixedUpdate() { //Start shooting guided bullets GuidedBulletShot(); //Selfdestruction after time Destroy(this.gameObject, destructionAfterSeconds); } public override void OnTriggerEnter(Collider other) { if(other.tag == "Player") { other.gameObject.SendMessage("ApplyDamage", weaponDamage, SendMessageOptions.DontRequireReceiver); Destroy(this.gameObject); } } #region GuidedBullet and correct rotationTowardsPlayer-function private void GuidedBulletShot() { transform.rotation = RotateTowardsPlayer(); shotDirection = (pTarget.position - transform.position).normalized; bulletRigidbody.velocity = shotDirection * bulletSpeed; } private Quaternion RotateTowardsPlayer() { //Get Rotation Direction Vector3 rotateDirection; rotateDirection = (pTarget.position - transform.position); rotateDirection = Vector3.RotateTowards(transform.forward, rotateDirection, rotationSpeed * Time.deltaTime, 5f); //Set rotation Quaternion activeRotation; activeRotation = Quaternion.LookRotation(rotateDirection); return activeRotation; } #endregion }</tentaclebossfight></tentaclebossfight> Link zu diesem Kommentar Auf anderen Seiten teilen More sharing options...
Tiwaz Geschrieben 29. Mai 2015 Melden Share Geschrieben 29. Mai 2015 Wieso willst du einen Vector3 in der Awake speichern? Wenn du die Position 1-malig als Vector3 speicherst wird der ja nicht mitgeändert wenn sich die transform.position ändert.. Und das tut sie u.U. jeden Frame ^^ Außer natürlich das Ziel ist irgend ein Turm der nicht weg kann.. Trotzdem solltest du generell immer die Transform Komponente abspeichern und darüber dann die position abfragen, da brauchst du dann auch keinen zusätzlichen Vector3 (außer du willst irgendeine Position aufgrund dieser Info berechnen und die du an mehreren Stellen benötigst. Einen Vorhaltepunkt beispielsweise) Außerdem verstehe ich deine Awake nicht ganz ._. Wieso überschreibst du die Methode? Und ich weiß auch ehrlich gesagt nicht was du in der blau markierten Zeile machen willst.. Ist das Pseudocode? o.O Link zu diesem Kommentar Auf anderen Seiten teilen More sharing options...
Sriel Geschrieben 29. Mai 2015 Autor Melden Share Geschrieben 29. Mai 2015 ja die blaue zeile is pseudocode. und zum überschreiben. in der awake methode greife ich halt auf die rigidbody komponente und speicher die spielerposition als vector3. die basisklasse "BulletSystem" beschreibt das grundgerüst für alle bullets, missles usw. und da jeder bullet auf die rigidbody komponente zugreifen muss, und auch die position des spieler als vector 3 benötigt wird habe ich es halt so gelöst... Aber wo is den der unterschied zwischen Transform und Vector3? Vector3 beschreibt ja eine position und Transform ist ja die transform einer Komponente. Nur ist mir halt wie oben beschrieben diese sache aufgefallen, Link zu diesem Kommentar Auf anderen Seiten teilen More sharing options...
Silveryard Geschrieben 29. Mai 2015 Melden Share Geschrieben 29. Mai 2015 Vector3 ist ein struct keine Klasse. Wenn du von einem Transform z.B. die Position als Vector3 abfrägst, dann bekommst du die aktuelle Position zurück. Ändert sich die Position, ändert sich dein Vector3 nicht. Link zu diesem Kommentar Auf anderen Seiten teilen More sharing options...
Mark Geschrieben 29. Mai 2015 Melden Share Geschrieben 29. Mai 2015 Zur Ergänzung: struct wird kopiert, class wird referenziert. Link zu diesem Kommentar Auf anderen Seiten teilen More sharing options...
Sriel Geschrieben 30. Mai 2015 Autor Melden Share Geschrieben 30. Mai 2015 Okay, thx für die hilfreiche Antwort hab mich halt nur gewundert 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.