Jump to content
Unity Insider Forum
  • Announcements

    • Lars

      Allgemeine Forenregeln   03/13/2017

      Forenregeln Nimm dir bitte einen Moment um die nachfolgenden Regeln durchzulesen. Wenn du diese Regeln akzeptierst und die Registration fortsetzen willst, klick einfach auf den "Mit der Registrierung fortfahren"-Button. Um diese Registration abzubrechen, klick bitte einfach auf den "Zurück" Button deines Browsers. Wir garantieren nicht für die Richtigkeit, Vollständigkeit und Brauchbarkeit der Nachrichten und sind auch nicht dafür verantwortlich. Die Beiträge drücken die Meinung des Autors des Beitrags aus, nicht zwangsläufig das, wofür die Forensoftware steht. Jeder Nutzer, der denkt, dass ein veröffentlichter Beitrag unzulässig bzw. störend ist, ist aufgefordert uns unverzüglich per E-Mail zu kontaktieren. Wir haben das Recht störende Beiträge zu löschen und bemühen uns, das in einem realistischem Zeitraum zu erledigen (sofern wir beschlossen haben, dass die Löschung notwendig ist). Du akzeptierst, durchgehend während der Nutzung dieses Services, dass du dieses Forum nicht dazu missbrauchen wirst, Inhalte zu veröffentlichen, welche bewusst falsch und/oder verleumderisch, ungenau, beleidigend, vulgär, hasserfüllt, belästigend, obszön, sexuell belästigend, bedrohlich, die Privatsphäre einer Person verletzend oder in irgend einer Art und Weise das Gesetz verletzen. Des Weiteren akzeptierst du, dass du keine urheberrechtlich geschützte Inhalte ohne Erlaubnis des Besitzers in diesem Forum veröffentlichst. Mit dem Klick auf den "Mit der Registrierung fortfahren"-Button, akzeptierst du zudem unsere Datenschutzerklärung und stimmst der Speicherung deiner IP-Adresse und personenbezogenen Daten zu, die dafür benötigt werden, um dich im Falle einer rechtswidrigen Tat zurückverfolgen zu können bzw. permanent oder temporär aus dem Forum ausschließen zu können. Es besteht keine Pflicht zur Abgabe der Einwilligung, dies erfolgt alles auf freiwilliger Basis.   Zusatzinformationen Der Forenbetreiber hat das Recht, Nutzer ohne Angabe von Gründen permanent aus dem Forum auszuschließen. Des Weiteren hat er das Recht, Beiträge, Dateianhänge, Umfrage, Blogeinträge, Galleriebilder oder Signaturen ohne Angabe von Gründen zu entfernen. Mit der Registrierung verzichtest du auf alle Rechte an den von dir erstellten Inhalten, bzw. treten diese an das Unity-Insider.de und Unity-Community.de ab. Dies bedeutet im Klartext, dass das Unity-Insider.de und Unity-Community.de frei über deine Texte verfügen kann, sofern diese nicht wiederum die Rechte anderer verletzen. Es besteht weiterhin kein Anspruch von registrierten Nutzern bzw. ehemaligen registrierten Nutzern darauf, dass erstellte Inhalte und/oder die Mitgliedschaft (User) wieder gelöscht werden (Erhaltung der Konsistenz dieses Forums).   Einwilligungserklärung Wenn du mit der Speicherung deiner personenbezogenen Daten sowie den vorstehenden Regeln und Bestimmungen einverstanden bist, kannst du mit einem Klick auf den Mit der Registrierung fortfahren-Button unten fortfahren. Ansonsten drücke bitte Zurück. Stand: 07.03.2011
Sriel

Guided Missle Frage

Recommended Posts

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>

Share this post


Link to post
Share on other sites

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

  • Like 1

Share this post


Link to post
Share on other sites

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,

Share this post


Link to post
Share on other sites

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.

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


×