我目前正在使用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 fadeOut
内FadeOut()
,则会打印True
,但是,如果我从Update()
内打印相同的值,则会打印False
。我怎样才能从True
内部返回Update()
?
答案 0 :(得分:0)
我无法真正看到问题,但我可以建议一个可能的解决方法。而不是在Start()中调用wait作为协程淡入淡出,而是尝试在Update中进行测试:
if(t> duration&&!dialog&&!fadeOut)FadeOut();
或者您可以尝试将fadeOut设为全局变量。