统一不改变布尔值

时间:2014-12-10 05:00:00

标签: c# unity3d boolean

我目前正在使用Unity在C#中编写应用程序,而且我遇到了一个小绊脚石。我试图在类的bool方法中更改Update()的值,但该值不受所有更改它的尝试的影响。这是我的代码:

using UnityEngine;
using System.Collections;

public class ModalTextController : MonoBehaviour {
    public SpriteRenderer text;
    public GameObject objectToFollow;
    public float duration = 3.5f;
    private bool fadeOut = false;
    public bool dialog = false;
    private float startTime;

    public void FadeOut() {
        startTime = Time.time;
        fadeOut = true;
    }

    // Use this for initialization
    void Start () {
        startTime = Time.time;
        if (!dialog) StartCoroutine(waitToFade());
    }

    // Update is called once per frame
    void Update () {
        float t = Time.time - startTime;
        text.color = new Color(1f, 1f, 1f, Mathf.SmoothStep(0f, 1f, t));

        if (fadeOut) {
            t = Time.time - startTime;
            text.color = new Color(1f, 1f, 1f, Mathf.SmoothStep(1f, 0f, t));
        }

        // Follow the player
        Vector2 newPos = transform.position;
        newPos.x = objectToFollow.transform.position.x;
        transform.position = newPos;
    }

    IEnumerator waitToFade() {
        yield return new WaitForSeconds(duration);
        FadeOut();
    }
}

代码中未明确定义的所有变量都是通过Inspector设置的。我已对此进行了一些调试,只有在FadeOut()之外调用waitToFade()时,该值才会发生变化。另外,如果我在print fadeOutFadeOut(),则会打印True,但是,如果我从Update()内打印相同的值,则会打印False。我怎样才能从True内部返回Update()

1 个答案:

答案 0 :(得分:0)

我无法真正看到问题,但我可以建议一个可能的解决方法。而不是在Start()中调用wait作为协程淡入淡出,而是尝试在Update中进行测试:

if(t> duration&&!dialog&&!fadeOut)FadeOut();

或者您可以尝试将fadeOut设为全局变量。