C# Unity使用协同程序在UI中显示多个图像
我有四个影响游戏最终结果的整数变量 游戏结束后,变量以C# Unity使用协同程序在UI中显示多个图像,c#,unity3d,C#,Unity3d,我有四个影响游戏最终结果的整数变量 游戏结束后,变量以时间.deltaTime滑动0至最大值(需要5-8秒) 然后,在所有四个变量达到玩家最大分数后,我将显示两个不同的页面(赢/输) 到目前为止,一切都很好,所以当结果改变时,最终图像也会改变 我的问题是我想把第三张图片,而数字幻灯片向上(等待页面!) 但是我看不到第三页。 我使用了检查员,尝试了几乎所有的可能性,但我看不到第三张图片 这是我的密码: using System.Collections; using System.Collectio
时间.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;
}
}
}
使用系统集合;
使用System.Collections.Generic;
使用系统线程;
使用System.Threading.Tasks;
使用UnityEngine;
使用UnityEngine.UI;
公共类EndGameStat:单行为{
公共文本外观文本;
公共文本相似性StatText;
公共文本风格统计文本;
公共文本HumanityStatText;
公共文本结果文本;
公共文本StoryResultText;
公众形象;
公众形象;成功形象;
公众形象等待形象;
公共精灵;
公共雪碧系列雪碧;
公共精灵等待图像精灵;
公共静态浮点数AppearanceStat=0;
公共静态浮点LikeabilityStat=0;
公共静态float MannerismsStat=0;
公共静态浮点HumanityStat=0;
公共静态int AppearanceStatFinal=70;
公共静态int-LikeabilityStatFinal=40;
公共静态int-mannerismstatfinal=90;
公共静态int HumanityStatFinal=30;
公共静态整数初始数;
公共静态int animationTime=3;
公共静态浮点平均值=(外观StatFinal+相似性StatFinal+动作StatFinal)/3;
Color maxColor=new Color32(20,200,20,255);
Color minColor=新颜色32(250,10,0,255);
//在第一帧更新之前调用Start
无效开始(){
AppearanceStatText.text=AppearanceStat.ToString();
LikeabilityStatText.text=LikeabilityStat.ToString();
mannerismstattext.text=MannerismsStat.ToString();
HumanityStatText.text=HumanityStat.ToString();
}
//每帧调用一次更新
无效更新(){
if(AppearanceStatFinal!=AppearanceStat){
AppearanceStat+=(animationTime*Time.deltaTime);
AppearanceStatText.text=AppearanceStat.ToString(“f0”);
AppearanceStatText.GetComponent().color=color.Lerp(minColor、maxColor、AppearanceStat/100f);
如果(ApparanceStat>ApparanceStatFinal)
AppearanceStat=AppearanceStatFinal;
}
if(LikeabilityStatFinal!=LikeabilityStat){
LikeabilityStat+=(animationTime*Time.deltaTime);
LikeabilityStatText.text=LikeabilityStat.ToString(“f0”);
LikeabilityStatText.GetComponent().color=color.Lerp(minColor、maxColor、LikeabilityStat/100f);
if(LikeabilityStat>likeabilitystfinal)
LikeabilityStat=LikeabilityStatFinal;
}
if(mannerismstatfinal!=MannerismsStat){
MannerismsStat+=(animationTime*Time.deltaTime);
mannerismstattext.text=mannerismstat.ToString(“f0”);
MannerismsStatText.GetComponent().color=color.Lerp(minColor、maxColor、MannerismsStat/100f);
if(mannerismstat>mannerismstatfinal)
mannerismstat=mannerismstatfinal;
}
如果(HumanityStatFinal!=HumanityStat){
HumanityStat+=(animationTime*Time.deltaTime);
HumanityStatText.text=HumanityStat.ToString(“f0”);
HumanityStatText.GetComponent().color=color.Lerp(minColor、maxColor、HumanityStat/100f);
如果(HumanityStat>HumanityStatFinal)
HumanityStat=HumanityStatFinal;
}
开始例行程序(结果页());
}
bool-CDPage(){
如果(HumanityStat==HumanityStatFinal&MannerismStat==MannerismStatFinal&LikeabilityStat==LikeabilityStatFinal&AppearanceStat==AppearanceStatFinal){
返回true;
}否则{
返回false;
}
}
IEnumerator结果页(){
返回新的等待时间(CDPage);
如果(平均值<50){
ResultText.text=“失败!”;
StoryResultText.text=“你不属于这里”;
failImage.sprite=failImageSprite;
SuccessImage.enabled=false;
}否则{
ResultText.text=“成功”;
StoryResultText.text=“欢迎!!”;
SuccessImage.sprite=SuccessImage sprite;
failImage.enabled=false;
}
}
}
你能帮我找出我的错误吗
更新:
更新后,我想你想要的是
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;
}
}
请注意,Update
方法不断调用新的start例程(resultPage())编码>每一帧。所以你得到了一堆并发的例程。如果例程已经在运行,您应该跳过它,或者在start
中只启动例程一次
还有,为什么在那里使用static
?如果这些是常量,则将它们设置为常量
实际上,我只是简单地将整个代码移动到一个类似
// 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;
}
}
//是的,启动本身可以是一个协同程序;)
无效IEnumerator开始()
{
WaitingImage.enabled=true;
SuccessImage.enabled=false;
failImage.enabled=false;
AppearanceStatText.text=AppearanceStat.ToString();
LikeabilityStatText.text=LikeabilityStat.ToString();
mannerismstattext.text=MannerismsStat.ToString();
HumanityStatText.text=HumanityStat.ToString();
while(HumanityStat!=HumanityStatFinal | | | MannerismsStat!=mannerismstatfinal | | | | LikeabilityStat!=likeability
// 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;
}
}