如何在范围内制造敌方圈子玩家?

时间:2018-02-22 13:51:16

标签: c# unity3d

我正在制作一个简单易懂的脚本。由于我是编码和新东西的新手,我的代码很可能看起来很糟糕。

好的,这就是事情: 我触发了一个敌人,只有当玩家接近某一点时才会产生。然后敌人必须跟随玩家,不管他在哪里,并且保持一定范围的3个单位。 到了这一步。一切正常。

现在,似乎无法发挥作用的是,我需要我的敌人来“绕轨道”#34;在我的玩家周围,当他处于某个范围内时(3)并且只在那时。 就目前而言,它从一开始就在轨道运行......我错过了什么?

到目前为止我的代码:

public Transform mTarget;
float mSpeed = 10.0f;
const float EPSILON = 3.0f;
public float speed;

void Start()
{
    OrbitAround (); 
}

void Update() {
    transform.LookAt (mTarget.position);
    if ((transform.position - mTarget.position).magnitude > EPSILON)
        transform.Translate (0.0f, 0.0f, mSpeed * Time.deltaTime);
}

void OrbitAround() {
    if(Vector3.Distance(transform.position, mTarget.transform.position) < 3) {
        transform.RotateAround (mTarget.transform.position, Vector3.up, speed * Time.deltaTime);
    }       
}

非常感谢,如果有人能帮助我的话。

干杯,

2 个答案:

答案 0 :(得分:0)

正如@Zibelas所说,Start函数只有一次。

Unity文档说明:

  

在第一次调用任何Update方法之前启用脚本时,在帧上调用Start。

所以尝试在Update函数中调用OrbitAround(),它应该可以工作

答案 1 :(得分:0)

嗯,并没有真正解决这个问题,但我找到了解决问题的方法。

当玩家再次离开时,我刚刚启动脚本围绕目标进行轨道运行,当敌人接近它并禁用它时。

void Update (){

        if (Vector3.Distance (transform.position, mTarget.transform.position) < 15) {
            script.enabled = true;
        }
            if(Vector2.Distance(transform.position, mTarget.transform.position) >15) {
                script.enabled = false;
        }

仍然,感谢评论和信息,伙计们。