2016-06-09 4 views
0

Warum folgt mein Feindskript nicht dem Player?Warum folgt mein Feindskript nicht dem Player?

using UnityEngine; 
using System.Collections; 

public class suivre : MonoBehaviour { 

    GameObject perso; 
    float persoposx; 
    float persoposy; 
    float persoposz; 

    // Use this for initialization 
    void Start() { 
     perso = GameObject.FindGameObjectWithTag ("Player"); 
     InvokeRepeating ("follower", 1, 1); 
    } 

    // Update is called once per frame 
    void Update() { 
     persoposx = perso.transform.position.x; 
     persoposy = perso.transform.position.y; 
     persoposz = perso.transform.position.z; 

    } 

    void follower() { 

     GetComponent<Rigidbody>().AddForce(new Vector3(persoposx, persoposy, persoposz)); 
    } 
} 

Dieses Skript ist eine Komponente des Feindes. Der Feind folgt dem Spieler nicht, sondern geht immer noch in eine Richtung - warum?

+1

Es sieht nicht so aus, als würden Sie die Positionsdaten des Players überhaupt verwenden. Mit "new Vector3 (1, 0, 0)" wird immer nur Kraft entlang der x-Achse angewendet, so dass es sinnvoll ist, dass sich der Gegner bewegt, aber nicht in Richtung des Spielers. – Serlite

+2

Bonjour JohnD, du hast große Probleme. Es ist absolut unmöglich, InvokeRepeating innerhalb von Update aufzurufen. Sie müssen wirklich mit den vielen ausgezeichneten Unity-Tutorials beginnen, um Ihre Hobby-Programmier-Reise zu beginnen. – Fattie

+0

Ich habe meinen Code bearbeitet, aber nichts passiert –

Antwort

1

Ihnen fehlt ein Konzept des Richtungsvektors.

Der Code sollte so aussehen:

using UnityEngine; 
using System.Collections; 

public class suivre : MonoBehaviour 
{  
    public float speed = 3f; 

    GameObject perso; 

    void Start() 
    { 
     perso = GameObject.FindGameObjectWithTag ("Player"); 
     InvokeRepeating ("follower", 1, 1); 
    } 

    void follower() 
    {  
     Vector3 directionToPlayer = perso.transform.position - this.transform.position; 
     directionToPlayer.Normalize(); 

     GetComponent<Rigidbody>().AddForce(directionToPlayer * speed); 
    } 
} 

Sie sich von Update-Methode loszuwerden. Du brauchst es hier nicht.

Dann erstellen Sie Richtungsvektor von Feind zu Spieler, normalisieren Sie es, und übergeben Sie dann diesen Vektor an AddForce und multiplizieren Sie es mit der gewünschten Geschwindigkeit.

Verwandte Themen