我正在开发一个 unity 的 2D 游戏,我正在尝试添加一个像黑洞这样的门户系统,当玩家进入黑洞 A 时,他会被传送到黑洞 B,反之亦然......
主要问题是,当玩家对象位置变为黑洞“B”时,由于黑洞 B 本身就是一个门户,玩家会陷入 A 和 B 之间的无限旅行,从而导致许多错误和非常糟糕的行为。
我想要的 是能够从门户 A 移动到 B 并从门户 B 移回到 A 。 不会陷入 A 和 B 之间的无限旅行
这里是负责的代码:
public GameObject exitBL ;
public bool teleport = false;
public Collider2D coll;
// Use this for initialization
void Start ()
{
}
// Update is called once per frame
void Update ()
{
if (teleport) {
exitBL.GetComponent<BlackHolePortal>().enabled = false; // Disable the logic for portal B which is exitBl
goToBl(coll);
}
}
void OnTriggerEnter2D(Collider2D col){
if (col.tag == "Player") {
coll = col;
//col.transform.position = new Vector3 (exitBL.transform.position.x , exitBL.transform.position.y , 0f);
teleport = true;
}
}
void OnTriggerExit2D(Collider2D col){
if (col.tag == "Player") {
exitBL.GetComponent<BlackHolePortal>().enabled = true;
}
}
void goToBl(Collider2D col){
teleport = false;
col.transform.position = new Vector3 (exitBL.transform.position.x + 1.0f , exitBL.transform.position.y + 1.0f , 0f);
coll.rigidbody2D.AddForce (new Vector2 (-1f,2f));
}
即使我添加 AddForce()
以快速从 Portal B 移动,负责将玩家 pos 移动到 portal pos 的线会以无限的方式运行,因为玩家会移动到也是门户的门户 B,所以玩家回到门户 A..等等。
有什么办法可以阻止这种行为吗?我在逻辑上需要一些帮助。
编辑:我已经更改了代码:现在我在传送时禁用逻辑。但我遇到了同样的问题。
**注意**:现在,我正在使我的对撞机非常小并传送我的播放器并添加一个偏移量,这个解决方案有效,但应该有更好的方法。
这里有一些我已经完成但不起作用或部分起作用的东西:
使用一个名为 teleport 的 bool 变量,当它进入触发对撞机时它会得到一个真值,并在更新中检查该变量,如果为真则执行
goToBl()
(更新运行每帧一次)(不起作用)使用相同的 bool 并在 Update() 中检查它是否为真,然后禁用门户 B 的脚本;直到 pleyer 摆脱它。 (不起作用)。
使黑洞门户对撞机非常小,然后移动到门户位置 + 1;此解决方案不是最终解决方案(只是一种解决方法),它部分起作用,有时效果很好,有时不起作用。
任何人都可以建议我解决这个问题的解决方案吗?
谢谢!
最佳答案
最好的办法是让玩家在传送门的位置 >+1
(在 x 或 y 轴上),这样他们实际上就被传送到传送门前...
但是,如果出于某种原因你想让他们直接传送到传送门:在每次传送后不允许玩家再次传送,直到他们离开传送器位置。
这可以使用 events
和一个名为 canTeleport
的简单 bool
来完成。
关于c# - 如何停止传送门 A 和 B 之间的无限旅行?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30398389/