0

Unity 5 c# を使用しており、2 つのトリガー コライダーを持つゲーム オブジェクトがあり、そのうちの 1 つは別の場所にあります。OnTriggerStay2D と OnTriggerEnter2D を使用できるようにする必要がありますが、入力されているトリガーを見つける必要があります。現在、1 つ目 (ポリゴン) トリガーを入力すると、2 つ目 (ボックス) に対して OnTriggerEnter がアクティブになります。2つのコライダーを区別するにはどうすればよいですか???

public void OnTriggerEnter2D(Collider2D other) //2nd collider trigger
{
    if (other.tag == "Player") {
        Found = true; //if the player is in shooting range
        Idle = false; 
    } 
}
public void OnTriggerStay2D(Collider2D other) //1st collider trigger
{
        if (Found != true) {
            if (other.tag == "Player") {
                Shield = true;
                Idle = false;
            } 
    }
}

public void OnTriggerExit2D(Collider2D other) //2nd collider trigger
{
    if (other.tag == "Player") {
        Found = false;
        Shield = false;
        Shooting = false;
        Idle = true;
    } 
}

最初のトリガーを public void OnTriggerStay2D(PolygonCollider2D other) にしようとしましたが、「このメッセージ パラメータは次のタイプである必要があります: Collider2D メッセージは無視されます」と表示されます。

私がやろうとしているのは、ゲームオブジェクトの前にポリゴントリガーを配置し、ゲームオブジェクトの近くに別のボックストリガーを配置することです。そのため、ゲームオブジェクトに近づくと、最初のトリガーに入り、シールドを上げますが、それに近づくと(射程範囲内で)シールドを下ろし、あなたを撃ち始めます。

4

2 に答える 2

0

collider2d はすべてのタイプの 2D コライダーを検出します。多角形か単なるボックスかは関係ありません。ドキュメントの提案として、公開または非公開である必要はありません。ただし、引数として colider2d のみを使用します。

デバッグ目的で print を使用しないのはなぜですか?

Print("you've entered the trigger function");

また、同じゲームオブジェクトで 2 つの異なるトリガー コライダーを使用することもありません。より徹底的な検出ができるように、2 つの個別のゲームオブジェクトを作成してみませんか。独自のトリガーコライダーを持つ各ゲームオブジェクトは、異なるタグを持つことができます。

1 つのオブジェクトで 2 つのトリガー コライダーを使用する必要がある場合。これは最良のアイデアではありません。shapeCount を使用して、どちらにヒットしているかを判断できます。私が言ったように、あなたがしようとしていることが2つの別々のオブジェクトでより簡単になる場合、同じオブジェクトで2つのトリガーコライダーを実行しないことを保証します.

ただし、通常、リンクは禁止されていないと思います。私はこれらのビデオを見て勉強します。それらはエンジンを説明するのに非常に役立ち、実際にはそれほど長くはありません。 https://unity3d.com/learn/tutorials/modules/beginner/2d 2d コライダーを説明するビデオもあります。

于 2015-07-18T09:03:29.357 に答える
0

これは私の修正です。私のゲームの 1 つで、岩があり、その下のブロックを削除して落下させるトリガーがあります。次に、岩に左または右に移動し始めるように指示する別のトリガーがあります。次に、ブロックを削除する別のトリガーもあります。ボルダーが接触したらボルダー。

したがって、2 つの新しいゲーム オブジェクトを作成し、新しい CS ファイルを作成して適切な名前を付けてから、これらの 2 つの新しいクラスを使用して、質問で参照しているゲーム オブジェクトを取り込むことができます。

その後、それらがトリガーされると、クラスのコードを使用できます。

したがって、最初のクラスは次のようになります

public void OnTriggerEnter2D(Collider2D other)
{
    if (other.tag == "Player") {
        Enemy.Found = true; //if the player is in shooting range
        Enemy.Idle = false; 
    } 
}

public void OnTriggerExit2D(Collider2D other)
{
    if (other.tag == "Player") {
        Enemy.Exit2DTrigger();
    } 
}

次に、他のクラスは次のようになります

public void OnTriggerStay2D(Collider2D other)
{
        if (Enemy.Found != true) {
            if (other.tag == "Player") {
                Enemy.Shield = true;
                IEnemy.dle = false;
            } 
    }
}

public void OnTriggerExit2D(Collider2D other)
{
    if (other.tag == "Player") {
        Enemy.Exit2DTrigger();
    } 
}

次に、敵のクラスでは、

public void Exit2DTrigger()
{
    Found = false;
    Shield = false;
    Shooting = false;
    Idle = true;
}

PS また、 other.gameObject.tag == "Player" を使用する必要はありませんか?

于 2015-07-18T09:20:52.967 に答える