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
Sign in to follow this  
Crashdash

Enemy-Movement

Recommended Posts

Hallo ihr,

 

ich bin Informatikstudent und habe mir Unity zugelegt, um "spielerisch" mit C# warm zu werden.

Ich nutze Photon für die Netzwerkkommunikation.

 

Zu meiner Frage:

Ich habe ein PlayerPrefab, dass beim Serverstart erstellt wird,

Und einen netten Drachen(Gegner) der 5 Sekunden nach dem Serverstart spawned.

Ich versuche, dass der Drache den Tag des Players findet, seine Position lokalisiert und sich zu ihm bewegt, so bald der Abstand der beiden kleiner als 20 ist.

Im Lokalen Spiel, findet er ihn sofort mit meinem Script und bewegt sich auf ihn zu, greift ihn dann an, etc. Im Multiplayer schaff ich es einfach nicht

Lange Rede, kurzer Sinn:

Wie findet der Drache meine verbundenen Spieler?

 

Script des Drachen:

 void Awake()
    {

     //Sende RPC um Clients nach playertag zu fragen

       photonView.RPC("playertag", PhotonTargets.All, gameObject.tag);

        Debug.Log("Found Player");
       

       //Distance zwischen Spieler und Drache

        float dist = Vector3.Distance(Enemy1.position, player.position);

        if (GameObject.FindGameObjectsWithTag("PlayerObject").Length > 0)                      //Fehlercode: NullReferenceException: Object reference not set to an instance of an object
                                                                                                                                                          EnemyMovement.Awake () (at Assets/Scripts 1/EnemyScripts/EnemyMovement.cs:35)


        {
            //Wenn Gegner und Drache noch leben...
            if (enemyHealth.currenthealth > 0 && playerHealth.currHealth > 0)

            {
                if (dist < 20 || Dmg == true)
                {
                    // setze das Ziel des Nav.Mesh auf Player
                    nav.enabled = true;
                    nav.SetDestination(player.position);
                    transform.LookAt(player.position);

                    if (nav.remainingDistance < 11)
                    {
                        Running2.SetBool("Running", false);
                    }

                    else
                    {
                        Running2.SetBool("Running", true);
                    }
                }
             

  
                else
                {
                    // ... disable the nav mesh agent.
                    nav.enabled = false;
                    Running2.SetBool("Running", false);

 

 

 

Playerscript:

public class Player : Photon.MonoBehaviour
{

    [PunRPC]
    void playertag(string text)
    {
        this.tag = text;

    }
        }

 

 

 

 

Share this post


Link to post
Share on other sites

Du hast da 2 Dinge, die nicht so recht passen.

Einmal ist da ein Timingproblem, denn dein Drache fragt einzig und allein in der Awake, ob denn en Player da ist.
Wenn der Player aber zu diesem Zeitpunkt nicht da ist, dann läuft all der nachfolgende Code ins Leere. Dein Drache sollte also zyklisch weiter suchen, falls in der Awake noch nichts gefunden wurde.

Dann hast du den GO Befehl FindGameObjectsWithTag. Das heisst, du suchst nach mehreren Playern die in ein Array geschoben würden, wenn du welche findest. Du hast aber kein Array dafür definiert und wirst dann wohl auch keine länge zurück bekommen
Wenn du das so machen willst dann schau dir dieses Beispiel mal an:

https://docs.unity3d.com/ScriptReference/GameObject.FindGameObjectsWithTag.html

Suchst du aber nur nach einen Player, dann solltest du FindWithTag nutzen:

https://docs.unity3d.com/ScriptReference/GameObject.FindWithTag.html

 

Ach so:

Willkommen! :)

 

Share this post


Link to post
Share on other sites

Hi, danke dir für die Antwort!

Hab das Problem allerdings schon gelöst bekommen. Hab den von dir beschriebenen Fehler dann doch selbst erkannt.

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

Sign in to follow this  

×