传送脚本无法正常工作

时间:2015-06-20 13:29:04

标签: unity3d

我想在我的游戏中制作一个游戏对象,当进入触发器时,它会将我的角色传送到另一个位置(otherTeleport.transform.position),但是当我使用我写的脚本时,我的角色在那里不会传送,而敌人则会传送。如果我将一个Debug.Log放在将记录角色位置的跳出脚本中,我会看到我的角色一直处于otherTeleport的位置,但只针对一个调试日志,之后它就是#&回到原来的传送位置。传送器将双向工作,所以如果用户转到一个,它将把它移到第二个,如果他转到第二个,那么它将被移植到第一个。

这是我的代码:

public class TeleportScript : MonoBehaviour {
public GameObject otherTeleport;
private Collider otherTeleportColl;

public bool isNeedToTeleport;
private TeleportScript otherTeleportScript;
private GameObject player;
private Bounce bounceScript;
// Use this for initialization
void Start () {
    isNeedToTeleport = true;
    otherTeleportColl = otherTeleport.GetComponent<Collider>();
    otherTeleportScript = otherTeleport.GetComponent<TeleportScript>();
    player = GameObject.Find("Player");
    bounceScript = player.GetComponent<Bounce>();

}

// Update is called once per frame
void Update () {

}

void OnTriggerEnter(Collider collider) {

    if (isNeedToTeleport == true) {
        if (collider.tag == "Enemy") {
            otherTeleportScript.setNeedToTeleport(false);
            collider.transform.position = otherTeleport.transform.position;

        }
        if (collider.tag == "Player") {

            otherTeleportScript.setNeedToTeleport(false);
            bounceScript.player.transform.position = otherTeleport.transform.position;
            collider.transform.position = otherTeleport.transform.position;
            bounceScript.playerTransform.position = otherTeleport.transform.position;


        }


    }


}

void OnTriggerExit(Collider collider) {
    Debug.Log ("TELEPORTED OUT");
    setNeedToTeleport(true);
    otherTeleportScript.setNeedToTeleport(true);
}


public void setNeedToTeleport(bool value) {
    if (value == true) {
        isNeedToTeleport = true;
    }
    else {
        isNeedToTeleport = false;
    }
    }
}

任何帮助将不胜感激!

3 个答案:

答案 0 :(得分:1)

  • 你的角色传送到另一个地方
  • 之后你将对撞机移到那里,注意,其他远程传送脚本的对撞机对象已经用 isNeedToTeleport = true初始化; < / strong>

  • 角色现在也在那里弹跳,击中另一个对象的对撞机,它在另一个脚本中检查 isNeedToTelport实际上是tru e并且它进入相同的If条件并且传送回来了!

答案 1 :(得分:1)

采取这一行:

otherTeleportScript.setNeedToTeleport(true);
从您的OnTriggerExit中取出

,或将其设置为false。实际上将其设置为false可能会更好。你想告诉另一个剧本有人来了,它不应该立即传送回去。

顺便说一句,您应该将setNeedToTeleport函数更改为:

public void setNeedToTeleport(bool value) {
        isNeedToTeleport = value;
}

那些ifs是多余的。

答案 2 :(得分:1)

我对您的代码进行了一些更改,无法测试,因为我现在无法访问统一,请告诉我它是否有效...

public class TeleportScript : MonoBehaviour {
public GameObject otherTeleport;
private Collider otherTeleportColl;

public bool isNeedToTeleport;
private TeleportScript otherTeleportScript;
private GameObject player;
private Bounce bounceScript;
// Use this for initialization
void Start () {
    isNeedToTeleport = true;
    otherTeleportColl = otherTeleport.GetComponent<Collider>();
    otherTeleportScript = otherTeleport.GetComponent<TeleportScript>();
    player = GameObject.Find("Player");
    bounceScript = player.GetComponent<Bounce>();

}

// Update is called once per frame
void Update () {

}

void OnTriggerEnter(Collider collider) {

    if(collider.tag == "Player" && isNeedToTeleport)
    {
            otherTeleportScript.setNeedToTeleport(false);
            collider.transform.position = otherTeleport.transform.position;
            bounceScript.player.transform.position = otherTeleport.transform.position; //not sure what is this for....
    }

}

void OnTriggerExit(Collider collider) {
    Debug.Log ("TELEPORTED OUT");
    setNeedToTeleport(true);
    otherTeleportScript.setNeedToTeleport(true);
}


public void setNeedToTeleport(bool value) {
    if (value == true) 
        isNeedToTeleport = true;  
    else 
        isNeedToTeleport = false;

    }
}