2017-04-19 16 views
1

Unityでアリーナスタイルのバトルゲームを作成しています。プレイヤーを再創造する際に問題があります。これは今、どのように動作するのですか?Unityで同時に2人のプレイヤーオブジェクトを再配置する

プレイヤーが死亡すると、死亡プレイヤーのリストに入れられ、プレイヤーオブジェクトが破壊されます。その後、ゲームは殺されたプレイヤーのリストをループし、ランダムに利用可能なスポーンポイントを選択し、そこでプレイヤーを再ポーズします。使用可能なスポーンポイントとは、プレイヤーがそのスポーンエリア内にいることによってトリガーされないスポーンポイントのことです。

問題は2人のプレイヤーが同時に死んだとき、または少なくとも同じ時間に非常に近いときに発生し、ランダムに選択されたスポーンポイントはトリガーとして処理するのに十分な時間がなかったため同じになります。これが起こると、すべてのユニティがクラッシュし、完全に再起動する必要があります。

私は、これを修正するために、Unityが同時にそれらを生成しないようにする必要がありますが、リストをループすることで修正されると考えました。同時に安全に死ぬ2人の選手を産卵させるには、どうすればいいですか?

答えて

0

私は私の問題を考え出したと私はランダムスポーンポイントとそれを維持することができるよ願っています。この問題は明らかに、2人のプレイヤーが同時に死にそうとしていたのと同じように、プレイヤーが死んでいる間に死にかけていたこととは関係ありませんでした。これが発生すると、OnTriggerLeave()メソッドが実行されないため、そこに何も存在しない場合でも、使用可能なスポーンポイントとしてカウントされません。

私は、各スポーンポイントに、プレイヤーが入力してスペースを出るときに変化するすべてのゲームオブジェクトのリストを保持するように修正しました。次に、プレイヤーが殺されると、各スポーンポイントのリストをチェックして、プレイヤーのゲームオブジェクトが含まれているかどうかを確認します。一致するものが見つかった場合は、スポーンポイントを解除し、利用可能と表示されます。

私が代わりに行うより良いアプローチは、リストをチェックしてスポーンポイントのリストにゲームオブジェクトがあるかどうかを確認し、存在しない場合にのみ利用可能にすることです。現在の方法では他のオブジェクトも考慮されていないため、ポイントをトリガーします。

0

これは、同じことがマルチスレッドアプリケーションで発生する古典的なキューの例です。あなたはここで行うことができる2つの事:懸念

    1. 転用あなたはアリーナそれ自身、例えばプレーヤーのスクリプトの外にスクリプトを作成する第一の方法では

    を始めてから競合を削除しますそこで次の産卵点を選択するメソッドを作成します。これはランダムではなく序数にすることができ、死んだ各プレイヤーは、次のスポーンポイントを選択するようにスクリプトに要求します。

    第2の方法では、各プレイヤーは自分自身のスポーンポイント、例えば、アリーナで定義されたスポーンポイントからのオフセットを持ちます。たとえば、プレイヤー1はオフセットゼロを持ち、スポーンポイントに右にスポーンすると、プレイヤー2はオフセット1を持ち、スポーンポイントから1単位オフを生成します。

    プレイヤーの数が限られている場合、最初の方法が好きです。あなたが多くのプレイヤーを持っているなら、キューは気になるかもしれません。

    は、それが役立ちます:)

  • 関連する問題