我想在我的游戏中制作一个游戏对象,当进入触发器时,它会将我的角色传送到另一个位置(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;
}
}
}
任何帮助将不胜感激!
答案 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;
}
}