0

私はC#を使用してUnityでゲームを開発しています。コードの一部は、ブール値を使用して、プレーヤーが建物のアップグレードを購入できるかどうかを決定します。もしそうなら、建物の整数は1増加します。その次に、ブール値はfalseに設定されます。そうでなければ、現時点では何も起こりません。

ゲームにはボタンがあり、機能的に週数を1増やして、プレイヤーが建物をアップグレードできるようにします(したがって、ブール値を再びtrueに設定します)。

問題は、アップグレードを購入した後、ブール値がfalseに設定され、再度trueに設定しても、建物をアップグレードしようとすると、ブール値がfalseに見えることです。また、ブール値の代わりに整数を使用して(値0と1を使用して)チェックしようとしましたが、問題はまだここにあります。

ここにいくつかのコードがあります:

using UnityEngine;
using System.Collections;
using System.Collections.Generic;

public class ActivateTrigger : MonoBehaviour
{
    public int transtech = 0;
    public int factech = 0;
    public bool facmag = true;
    public bool transmag = true;

    void OnGUI () {GUI.Box(new Rect(0, Screen.height - 120 - 60, 150, 30), "Week: " + week.ToString());
    if (GUI.Button(new Rect(0, Screen.height - 120 - 30, 150, 20), "Continue one week"))
    {       
        NextProcess();
    }
    if (GUI.Button(new Rect(20, 70, 120, 20), "Koop upgrade") )
    {
            Debug.Log("Facmag: " + facmag);
        if (facmag == true)
            {
        facmag = false;
            }
    }

    void NextProcess()
    {
        Debug.Log("Next process called");
        facmag = true;
        transmag = true;
        Debug.Log("Facmag: " + facmag);
    }
}

したがって、NextProcess()が呼び出されると、デバッグログに値がtrueであることが示されます。ただし、初めてアップグレードを購入した後は、ボタンを押してNextProcess()を実行したかどうかに関係なく、値はfalseのままです。何かを完全に見逃したのではないかと思います。このクラスの他のコードはブール値を使用していません。また、私が持っている他のいくつかのクラスも使用していません。では、問題はどこにあるのでしょうか。

4

1 に答える 1

2

[短い答え]

スクリプトが複数のオブジェクトにアタッチされている場合、 OnGUI()の一番上のボタンのみがfacmagを変更するか、NextProcess()を呼び出します。

[上記の私のコメントのわずかな拡大]

オブジェクト間で共有されるスクリプトのUnityの実行順序は制御できません。(ただし、単一のオブジェクトでスクリプトの順序を変更できます。)つまり、OnGUI()は、アタッチされているN個のオブジェクトに対してランダムな順序でN回呼び出されます。特定のマウス位置にある「最上位」のGUI要素のみがマウス入力を受け入れます。

例:

using UnityEngine;
using System.Collections;

public class OverlapButton : MonoBehaviour {
    public string id_;
    void OnGUI(){
            if(GUI.Button(new Rect(0,0,50,50),"Touch")){
                    Debug.Log("I'm object " + id_);
            }
    }
}

このスクリプトを50個のオブジェクトにアタッチすると、Unityは50個のボタンを描画しますが、マウスクリックに応答するボタンは1つだけであり、どれを制御することはできません。

于 2013-01-04T18:18:05.740 に答える