球员来回传送

时间:2015-10-06 23:51:45

标签: c# unity3d

当一名玩家离开屏幕时,我希望他们传送到屏幕的另一侧,但这不是很好。

我将以下脚本附加到两个传送项目,但当玩家进入对撞机时,它开始在两者之间来回传送(两个碰撞器都有以下脚本和一个2d盒子对撞机作为触发器)。 / p>

using UnityEngine;
using System.Collections;

public class WallTransport : MonoBehaviour {

    public Collider2D destination;
    public LayerMask layer;

    void OnTriggerEnter2D(Collider2D other) {
        if(((1 << other.gameObject.layer) & layer) != 0) {
            Vector2 destPos = destination.transform.position;
            other.transform.position = new Vector2(destPos.x, other.transform.position.y);
        }
    }
}

2 个答案:

答案 0 :(得分:0)

using UnityEngine;
using System.Collections;

public class WallTransport : MonoBehaviour {

    public Collider2D destination;
    public LayerMask layer;

    void OnTriggerEnter2D(Collider2D other) {
        if(((1 << other.gameObject.layer) & layer) != 0) {
            Vector2 destPos = destination.transform.position;
            other.transform.position = new Vector2(destPos.x + 1, other.transform.position.y);
            //                                     ^^^^^^^^^^^^^
        }
    }
}

例如,在下图中,传送器B位于(10,0),传送器A位于(0,0)。假设他们从左到右进入传送器B,而不是在传送后将球员吐出(0,0),假设他们从左到右进入传送器B,那么他们的动量就会继续朝这个方向发展。

这只是一个简单的例子,绝不假设您的情况是基本的。

simple teleporter example

答案 1 :(得分:0)

添加名为&#34; has_teleported&#34;的bool。并默认将其设置为false 当你进入一个传送对撞机时,打开它(true),当你退出传送对撞机时,将其关闭(假)。

只有在关闭时才允许传送功能工作。

Dub stylee的答案会起作用并且更简单,但是,这种方式更具动态性(可以通过事件等启用和禁用远程传送),并且如果需要更改尺寸,则可以扩展。

选择最适合您特定项目的方式,总会有权衡。

希望这有帮助:)