我有四个整数变量,影响游戏的最终结果。
当游戏结束时,变量以Time.deltaTime从0滑到最大(需要5-8秒)。
然后,在所有四个变量达到最大得分后,我将显示两个不同的页面(赢/输)。
到目前为止,一切都很好,所以当结果改变时,最终图像也会发生变化。
我的问题是,我想放第三张照片,而数字滑到向上(等待页面!)
但我看不见第三页。我利用了检验员,几乎每一种可能性都试过了,但我看不见第三张照片。
这是我的代码:
using System.Collections;
using System.Collections.Generic;
using System.Threading;
using System.Threading.Tasks;
using UnityEngine;
using UnityEngine.UI;
public class EndGameStat : MonoBehaviour {
public Text AppearanceStatText;
public Text LikeabilityStatText;
public Text MannerismsStatText;
public Text HumanityStatText;
public Text ResultText;
public Text StoryResultText;
public Image failImage;
public Image SuccessImage;
public Image WaitingImage;
public Sprite failImageSprite;
public Sprite successImageSprite;
public Sprite WaitingImageSprite;
public static float AppearanceStat = 0;
public static float LikeabilityStat = 0;
public static float MannerismsStat = 0;
public static float HumanityStat = 0;
public static int AppearanceStatFinal = 70;
public static int LikeabilityStatFinal = 40;
public static int MannerismsStatFinal = 90;
public static int HumanityStatFinal = 30;
public static int intialNumber;
public static int animationTime = 3;
public static float avg = (AppearanceStatFinal + LikeabilityStatFinal + MannerismsStatFinal) / 3;
Color maxColor = new Color32 (20, 200, 20, 255);
Color minColor = new Color32 (250, 10, 0, 255);
// Start is called before the first frame update
void Start () {
AppearanceStatText.text = AppearanceStat.ToString ();
LikeabilityStatText.text = LikeabilityStat.ToString ();
MannerismsStatText.text = MannerismsStat.ToString ();
HumanityStatText.text = HumanityStat.ToString ();
}
// Update is called once per frame
void Update () {
if (AppearanceStatFinal != AppearanceStat) {
AppearanceStat += (animationTime * Time.deltaTime);
AppearanceStatText.text = AppearanceStat.ToString ("f0");
AppearanceStatText.GetComponent<Text> ().color = Color.Lerp (minColor, maxColor, AppearanceStat / 100f);
if (AppearanceStat > AppearanceStatFinal)
AppearanceStat = AppearanceStatFinal;
}
if (LikeabilityStatFinal != LikeabilityStat) {
LikeabilityStat += (animationTime * Time.deltaTime);
LikeabilityStatText.text = LikeabilityStat.ToString ("f0");
LikeabilityStatText.GetComponent<Text> ().color = Color.Lerp (minColor, maxColor, LikeabilityStat / 100f);
if (LikeabilityStat > LikeabilityStatFinal)
LikeabilityStat = LikeabilityStatFinal;
}
if (MannerismsStatFinal != MannerismsStat) {
MannerismsStat += (animationTime * Time.deltaTime);
MannerismsStatText.text = MannerismsStat.ToString ("f0");
MannerismsStatText.GetComponent<Text> ().color = Color.Lerp (minColor, maxColor, MannerismsStat / 100f);
if (MannerismsStat > MannerismsStatFinal)
MannerismsStat = MannerismsStatFinal;
}
if (HumanityStatFinal != HumanityStat) {
HumanityStat += (animationTime * Time.deltaTime);
HumanityStatText.text = HumanityStat.ToString ("f0");
HumanityStatText.GetComponent<Text> ().color = Color.Lerp (minColor, maxColor, HumanityStat / 100f);
if (HumanityStat > HumanityStatFinal)
HumanityStat = HumanityStatFinal;
}
StartCoroutine (resultPage ());
}
bool CDPage () {
if (HumanityStat == HumanityStatFinal & MannerismsStat == MannerismsStatFinal & LikeabilityStat == LikeabilityStatFinal & AppearanceStat == AppearanceStatFinal) {
return true;
} else {
return false;
}
}
IEnumerator resultPage () {
yield return new WaitUntil (CDPage);
if (avg < 50) {
ResultText.text = "FAIL!";
StoryResultText.text = "You are not belong here";
failImage.sprite = failImageSprite;
SuccessImage.enabled = false;
} else {
ResultText.text = "SUCCESS";
StoryResultText.text = "Welcome!!";
SuccessImage.sprite = successImageSprite;
failImage.enabled = false;
}
}
}你能帮我找出我的错误吗?
更新:

发布于 2019-12-18 12:32:17
经过你的更新,我想你想要的是
private void Awake(){
// enough to do these only once
WaitingImage.sprite = WaitingImageSprite;
failImage.sprite = failImageSprite;
SuccessImage.sprite = successImageSprite;
}
IEnumerator resultPage ()
{
WaitingImage.enabled = true;
SuccessImage.enabled = false;
failImage.enabled = false;
yield return new WaitUntil (CDPage);
if (avg < 50) {
ResultText.text = "FAIL!";
StoryResultText.text = "You are not belong here";
failImage.enabled = true;
} else {
ResultText.text = "SUCCESS";
StoryResultText.text = "Welcome!!";
SuccessImage.enabled = true;
}
}此外,如前所述:所有这些GetComponent<Text>调用都是冗余的,您可以简单地使用。
AppearanceStatText.color = ...;请注意,您的Update方法不断地调用一个新的StartCoroutine(resultPage()); (每个帧)。所以你可以得到一堆并行的例程。如果某个例程已经在运行,您应该跳过它,或者在Start中只启动一次例程。
此外,您为什么在那里使用static?如果这些是常量,则将它们设置为const。
实际上,我只需将整个代码移动到一个coroutine,如下所示
// yes, Start itself can be a coroutine ;)
void IEnumerator Start ()
{
WaitingImage.enabled = true;
SuccessImage.enabled = false;
failImage.enabled = false;
AppearanceStatText.text = AppearanceStat.ToString ();
LikeabilityStatText.text = LikeabilityStat.ToString ();
MannerismsStatText.text = MannerismsStat.ToString ();
HumanityStatText.text = HumanityStat.ToString ();
while(HumanityStat != HumanityStatFinal || MannerismsStat != MannerismsStatFinal || LikeabilityStat != LikeabilityStatFinal || AppearanceStat != AppearanceStatFinal
{
if (AppearanceStatFinal != AppearanceStat)
{
AppearanceStat += (animationTime * Time.deltaTime);
// do your clamping first, then set the color and update the text
if (AppearanceStat > AppearanceStatFinal) AppearanceStat = AppearanceStatFinal;
AppearanceStatText.text = AppearanceStat.ToString ("f0");
AppearanceStatText.color = Color.Lerp (minColor, maxColor, AppearanceStat / 100f);
}
//TODO EQUALLY FOR THE OTHER 4 TEXTS AND ACCORDING VALUES
// finally wait for the next frame here
yield return null;
}
// finally do your check
if (avg < 50)
{
ResultText.text = "FAIL!";
StoryResultText.text = "You are not belong here";
failImage.enabled = true;
}
else
{
ResultText.text = "SUCCESS";
StoryResultText.text = "Welcome!!";
SuccessImage.enabled = true;
}
}https://stackoverflow.com/questions/59391489
复制相似问题