2016-06-09 205 views
0

为什么我的敌人脚本没有跟随玩家?为什么我的敌人脚本不会跟随玩家?

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)); 
    } 
} 

这个脚本是对敌人的一个组件。敌人不跟随玩家,但仍朝着一个方向前进 - 为什么?

+1

它看起来并不像使用球员的位置数据。你总是用'new Vector3(1,0,0)'沿x轴施加力,所以敌人会移动而不是朝着玩家的方向移动。 Bonjour JohnD – Serlite

+2

,你有很大的问题。在Update中调用InvokeRepeating是绝对不可能的。你真的需要从许多优秀的Unity教程开始,开始你的爱好者编程之旅。 – Fattie

+0

我编辑了我的代码,但没有任何反应 –

回答

1

你错过了一个方向矢量的概念。

你的代码应该看起来像:

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); 
    } 
} 

摆脱更新的方法。这里你不需要它。

然后创建从敌人到玩家的方向矢量,将其归一化,然后将此矢量传递给AddForce并将其乘以所需的速度。