2015-12-08 1 views
0

Je suis en train de tir une balle dans la direction du joueur, mais la balle est instatiated mais ne laisser la position initiale, ne sais pas pourquoi, voici le code:Tirez une balle dans la direction du joueur Unité

using UnityEngine; 
using System.Collections; 

public class AtackPlayer : MonoBehaviour { 
    public string playerTag = "Player"; 
    public AnimationClip startAtack; 
    public AnimationClip endAtack; 
    public float atackInterval = 2f; 

    public GameObject enemyBullet; 
    public float bulletSpeed = 20f; 

    private Animator _anim; 
    private Transform _transform; 

    // Use this for initialization 
    void Start() { 
     _anim = GetComponentInParent<Animator>(); 
     _transform = GetComponent<Transform>(); 
    } 
    private IEnumerator Atack(Vector2 playerPosition) 
    { 
     _anim.Play(startAtack.name); 
     yield return new WaitForSeconds(startAtack.length); // executa o clipe e ataca 
     GameObject thisBullet = Instantiate(enemyBullet, _transform.position, Quaternion.identity) as GameObject; //instancia o bullet prefab 
     thisBullet.transform.position = Vector2.Lerp(thisBullet.transform.position, playerPosition, bulletSpeed * Time.deltaTime); 
     _anim.Play(endAtack.name); 
     yield return new WaitForSeconds(endAtack.length); // executa o clipe de finalização do ataque 
     yield return new WaitForSeconds(atackInterval); // executa o clipe de finalização do ataque 
    } 
    // Update is called once per frame 
    void Update() { 


    } 
    void OnTriggerEnter2D(Collider2D player) 
    { 
     if (player.gameObject.tag == playerTag) 
     { 
      Vector2 playerPos = player.transform.position; 
      StartCoroutine(Atack(playerPos)); 
     } 
    } 
} 

La balle prefab a un bodybody2d rigide et un collisionneur de cercle, aussi un moteur de rendu sprite et un animateur pour gérer son animation.

Une aide?

+2

Peut-être que la balle croit en la paix, l'amour et la compréhension. –

+0

Je veux qu'il les tue tous = ( –

+0

Je pense que c'est parce que vous ne lui avez jamais dit de quitter la position initiale – maksymiuk

Répondre

0
thisBullet.transform.position = Vector2.Lerp(thisBullet.transform.position, playerPosition, bulletSpeed * Time.deltaTime); 


When t = 0 returns a. When t = 1 returns b. When t = 0.5 returns the point midway between a and b. 
t= bulletSpeed * Time.deltaTime; 
  • Dans votre jeu probablement t a une valeur très proche de 0. Cela signifie que votre position de balle reste à peu près la même position. Aussi vous avez besoin d'une boucle dans la fonction Atack pour que la balle ait la même position avec la puce .

    while (thisBullet.transform.position = playerPosition!) {
    thisBullet.transform.position =Vector2.Lerp(thisBullet.transform.position, playerPosition, bulletSpeed *Time.deltaTime);

    rendement return new WaitForSeconds (0.1F);

    }

Vous pouvez régler tout état ici mais vous voulez pour votre jeu. Dans ce code, il passe à la position du joueur tous les 0.1f.

+0

WaitForSeconds crée un nouvel objet pour démarrer une nouvelle coroutine, utilisez null à la place pour enregistrer un appel GC. – Everts