我正在研究一个二维的统一游戏,我正在尝试添加一个门户系统,如黑洞,当玩家进入黑洞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()以快速从门户b移动,负责将播放器pos移动到门户pos的行也以无限方式运行,因为播放器也将移动到门户b,因此播放器返回门户a…等。
有没有办法阻止这种行为?我需要一些逻辑方面的帮助。
编辑:我已经更改了代码:现在当逻辑被传送时,我将禁用它。但我也有同样的问题。
**注**:现在,我正在使我的对撞机非常小,传送我的播放器和增加一个偏移量,这个解决方案工作,但应该有更好的办法。
以下是我做过的一些不起作用或部分起作用的事情:
使用一个名为teleport的bool变量,这个变量在进入触发器碰撞器时得到一个true值,并在update中检查该变量,如果true dogoToBl()(update run once per frame)(不起作用)
使用相同的bool并在update()中检查它是否为true,然后禁用portal b;的脚本,直到pleyr退出。(不起作用)。
使黑洞入口对撞机变得非常小,然后移动到入口位置+1;此解决方案不是最终的解决方案(只是一个解决方案),它部分工作,有时工作得非常好,有时不工作。
有人能给我建议解决这个问题的办法吗?
谢谢!

最佳答案

你最好的选择是让玩家的位置>+1(在X或Y轴)的门户,使他们实际上是在门户前传送。
但是,如果出于任何原因,你希望他们直接传送到传送门:每次传送后,不允许玩家再次传送,直到他们离开传送门位置。
这可以使用events和一个名为bool的简单canTeleport来完成。

关于c# - 如何停止门户A和B之间的无限旅行?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/30398389/

10-11 14:59