2015-06-20 66 views
0

我想在遊戲中製作一個遊戲對象,當它進入觸發器時,它會將我的角色傳送到另一個位置(otherTeleport.transform.position),但是當我使用腳本時我寫過,我的角色不會在那裏傳送,而敵人會。如果我在反彈腳本中放置一個Debug.Log來記錄角色的位置,我會看到我的角色已經在另一個Teleport的位置,但只有一個調試日誌,並且在此之後它回到原始的瞬移位置。這個瞬移將會雙向工作,所以如果用戶轉到一個,它將把它移到第二個,如果他轉到第二個,那麼它將被移植到第一個。傳送腳本不能按預期工作

這裏是我的代碼:

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

任何幫助,將不勝感激!

+0

我對你的問題的猜測成爲遠距傳物背後的邏輯。如果您的玩家觸發TeleporterA上的瞬間觸發器,它將傳送到TeleporterB。然後你的玩家將觸發TeleporterB上的瞬發觸發器並傳送到TeleporterA。在這裏看到問題?您可能需要設置一個冷卻時間定時器,以便您在每次玩家進入傳送觸發器時不會經常傳送。還有其他一些方法可以解決這個問題,但它們可能會讓圖層變得雜亂無章。我非常懷疑有人會爲您編寫腳本,因此您可能必須自己找出邏輯。 – Savlon

回答

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; 

    } 
} 
1
  • 你的性格瞬間移動到其他地方
  • 後您移動撞機那邊藏漢,通知是隱形傳態等腳本的對撞機的對象已經與isNeedToTeleport = TRUE初始化;

  • 人物如今也出現反彈,打其他對象的對撞機,它會檢查isNeedToTelport其實TRU在這個其他腳本 e和它進入相同的,如果條件並傳送回來了!

1

走這條線:

otherTeleportScript.setNeedToTeleport(true); 

你的OnTriggerExit的,或將其設置爲false。實際上將它設置爲假可能會更好。你想告訴另一個腳本有人傳入,它不應該立即傳送回來。

順便說一句,你應該改變你的setNeedToTeleport功能如下:

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

那些疑問是多餘的。

+0

同意'ifs'是多餘的,我會盡可能地說整個功能是多餘的。 – Catwood