0

作成中のゲームについてサポートが必要です。私は Unity エンジンを使用してゲームを作成しており、C# コーディングは初めてです。プレーヤーが正方形の色を制御し、特定の色のオブジェクトを通過するときに正しい色に変更する必要がある 2D ゲームを作成しています。プレーヤーの色が大きく変化し、オブジェクトがトリガーになります。プレイヤーが正しい色でない場合にトリガーを通過すると、プレイヤーは死亡します。それは完璧に機能しますが、オブジェクトが死亡したプレイヤーの色に関係なく、最初のオブジェクトに対してのみ次のオブジェクトが死亡します。if ステートメントで if を試してみましたが、それ以外の場合はわかりません。あなたの助けは大歓迎です!

プレイヤーコードはこちら

void OnTriggerEnter (Collider other)
{
    if (other.transform.tag == "Blue") {
        blue = true;
    }
    else {
        blue=false;
    }

    if (other.transform.tag == "Red") {
        red = true;
        } 
    else {
        red =false;
    }

    if (other.transform.tag == "Blue" && GameObject.Find ("Blue").GetComponent<Blue> ().mb == false) {
                    yield return 0;
                    Die ();
    } else if (other.transform.tag == "Red" && GameObject.Find ("Red").GetComponent<Red> ().mr == false) {
                    Die ();     
    }

}

以下は、異なる色のオブジェクトごとのコードです。これはたまたま青です。

void Update () {
    if (GameObject.Find ("Player").GetComponent<Movement> ().blue == true && GameObject.Find ("Player").GetComponent<Movement> ().playerBlue == true) {
                    mb = true;  
            } else {
        mb = false;         
    }
    if (!GameObject.Find("Player").GetComponent<Movement>().blue) {
        mb = false; 
    } 
}
4

1 に答える 1

0

あなたの実行順序は少し乱雑です。それがおそらく機能していない理由です。すべてのロジックが 2 つではなく 1 つのパスに従うようにしてください。現在、あなたは:

  • (1)衝突、(2)いくつかのブール変数の設定、(3)いくつかの変数のチェック、(4)オプションの死。
  • 別のクラスで別の時間に、ステップ 1 で設定したブール値を設定し、ステップ 3 でチェックした変数を設定します。

これがスパゲッティコードと呼ばれるものです。それはすべて一緒にねじれています。2 つのロジックが相互に依存しないように、もつれを解く方法を考えられますか?

たとえば、後者のコード ブロックでは、プレイヤーが青かどうかをチェックしています。blueプレーヤーが設定(または設定)するときに、代わりにそのコードを実行できますblue=falseか?

編集:これがあなたの質問に厳密に答えているわけではないことはわかっていますが、このもつれを解くことは問題解決プロセスの最初のステップです.

于 2015-03-06T20:10:11.503 に答える