2

Unity3D GUI コントロールのコントローラーとビューのビジネス ロジックを分離する方法を理解できていません。

たとえば、 がある場合、ビューのライフサイクル ステージGUI.Boxからフェード インまたはフェード アウトするコントローラーをどのように実装しますか?OnGUI

意見

using UnityEngine;

public class ExampleView : MonoBehaviour {

    protected void OnGUI () {
        GUI.Box(new Rect(0, 0, 100, 100), "Title");
    }

}

コントローラーをインスタンス化して変更する場合、メイン ビュー スレッドからの通知が必要になりalphaます。GUI.colorUpdate()

機能を大まかにカプセル化するために、これが単一のスクリプトである場合、次のように実装できます。

using UnityEngine;

public class ExampleView : MonoBehaviour {

    private Color color;

    protected void Start () {
        color = Color.white;
    }

    protected void OnGUI () {
        GUI.color = color;
        GUI.Box(new Rect(0, 0, 100, 100), "Title");
    }

    protected void Update () {
        if(color.a > 0)
            color.a -= Time.deltaTime / 3;
    }

}

iTween がプロパティへの変更をアニメーション化する方法と同様に、次のようなiTween.fadeTo(gameObject, ...ステートメントを使用して Unity3d GUI コントロールにこれを実装する方法FadeOut()

複数のコントローラ インスタンスが指定されていない限り、個々の GUI コントロールをターゲットにする方法はおそらくありませんOnGUI()GUI.Boxただし、フェード インの後にが続くなど、孤立した GUI インスタンスを制御するのはクールですGUI.Label

4

2 に答える 2

1

あなたはこのようなものを探していますか?:

using UnityEngine;

public class ExampleView : MonoBehaviour {

private Color color;
private bool bFadeIn = false;
private bool bFadeOut = false;

protected void Start () {
    color = Color.white;
} 
public void FadeOut(){
    bFadeOut = true;
    bFadeIn = false;
}    
public void FadeIn(){
    bFadeIn = true;
    bFadeOut = false;
}

protected void OnGUI () {
    GUI.color = color;
    GUI.Box(new Rect(0, 0, 100, 100), "Title");
}

protected void Update () {
    if(bFadeOut && color.a > 0.0)color.a -= Time.deltaTime / 3;
    if(bFadeIn && color.a < 1.0)color.a += Time.deltaTime / 3;
}
}

コントロールが非表示になるタイミングを決定するフラグを含め、非表示の場合は、GuiRender関数全体をスキップすることもできます。

于 2012-07-02T16:27:25.883 に答える
0

これがあなたが探しているものかどうかはわかりませんが、gui にフェード効果を追加する簡単な方法です..

using UnityEngine;
using System.Collections;

/**Fade In/Out Instructions:
* 1.Create bool fadeIn. Create float alpha.
* 2.Call Fade() method at start of OnGUI().
* 3.Put 'GUI.color = new Color(1,1,1,alpha)' above the elements you want to fade'.
* 4.To fade in, fadeIn = true. 
* 5.To fade out, fadeIn = false.
* 6.To deactivate buttons on fade out, wrap gui in 'if(alpha > 0)'
**/

public class MainMenuGUI : MonoBehaviour {

    int buttonWidth;
    int buttonHeight;

    public float alpha;
    public bool fadeIn;

// Use this for initialization
void Start () {

    buttonWidth = 100;
    buttonHeight = 50;

    fadeIn = true;
}

void OnGUI(){

    Fade();

    GUI.color = new Color(1,1,1,alpha);

    if(alpha > 0)
    {
        if (GUI.Button (new Rect ((Screen.width/2)-50, (Screen.height/2)-(buttonHeight*4/2), 100, 50), "PLAY"))
        {
            fadeIn = false;
            Debug.Log("Play pressed");
        }

        if (GUI.Button (new Rect ((Screen.width/2)-50, ((Screen.height/2)-(buttonHeight*4/2)+ buttonHeight), 100, 50), "SCORES")) 
        {
            Debug.Log("Scores pressed");
        }

        if (GUI.Button (new Rect ((Screen.width/2)-50, ((Screen.height/2)-(buttonHeight*4/2)+ buttonHeight*2), 100, 50), "OPTIONS")) 
        {
            Debug.Log("Options pressed");
        }

        if (GUI.Button (new Rect ((Screen.width/2)-50, ((Screen.height/2)-(buttonHeight*4/2)+ buttonHeight*3), 100, 50), "EXIT")) 
        {
            Debug.Log("Exit pressed");
        }
    }
}

void Fade(){
    if(fadeIn){
        alpha = Mathf.Clamp(alpha+0.01f,0,1);
    }else{
        alpha = Mathf.Clamp(alpha-0.01f,0,1);   
    }
}

}

あなたのゲームで頑張ってください:)

于 2013-11-20T20:14:06.217 に答える