Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/329.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/visual-studio-code/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# Unity脚本在重新激活其所连接的游戏对象后停止工作_C#_Unity3d - Fatal编程技术网

C# Unity脚本在重新激活其所连接的游戏对象后停止工作

C# Unity脚本在重新激活其所连接的游戏对象后停止工作,c#,unity3d,C#,Unity3d,我只想制作一个乒乓球动画,但当它切换UI元素时,脚本停止工作。有什么想法吗?你可能想知道为什么我不使用动画,首先它会是相同的问题,其次我需要其他脚本也附加到停用的对象:S using System.Collections; using System.Collections.Generic; using UnityEngine; using UnityEngine.UI; public class UiFadingPingPong : MonoBehaviour{ bool fadeT

我只想制作一个乒乓球动画,但当它切换UI元素时,脚本停止工作。有什么想法吗?你可能想知道为什么我不使用动画,首先它会是相同的问题,其次我需要其他脚本也附加到停用的对象:S

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;

public class UiFadingPingPong : MonoBehaviour{

    bool fadeTrigger = false;
    float currentVal = 0;
    public float duration = 10f;
    public bool enable = false;
    
    void Start(){
        currentVal = 0;
    }
    void OnEnable(){  
        enable = true;
    }
    void OnDisable(){  
        enable = false;
    }
        // Update is called once per frame
    void Update(){
        if(enable){ 
            if(currentVal <= 0){
                fadeTrigger = false;
            }
            if(currentVal >= 1){
                fadeTrigger = true;
            }
            if(fadeTrigger == false){
                currentVal += Time.deltaTime / duration;    
            }else{
                currentVal -= Time.deltaTime / duration;    
            }
            Image image = GetComponent<Image>();
            var tempColor = image.color;
            tempColor.a = currentVal;
            image.color = tempColor;
        }
    }
}  
使用系统集合;
使用System.Collections.Generic;
使用UnityEngine;
使用UnityEngine.UI;
公共级别UIFading乒乓球:单一行为{
bool fadeTrigger=假;
float currentVal=0;
公共浮动持续时间=10f;
公共bool enable=false;
void Start(){
currentVal=0;
}
void OnEnable(){
启用=真;
}
void OnDisable(){
启用=错误;
}
//每帧调用一次更新
无效更新(){
如果(启用){
如果(currentVal=1){
fadeTrigger=true;
}
如果(fadeTrigger==false){
currentVal+=Time.deltaTime/持续时间;
}否则{
currentVal-=Time.deltaTime/持续时间;
}
Image=GetComponent();
var tempColor=image.color;
tempColor.a=currentVal;
image.color=tempColor;
}
}
}  

感谢您的帮助:)

通过禁用此脚本附加到的游戏对象,您也可以禁用脚本

这意味着
Update()
方法将不会运行,也不会解释
enable
变量现在被设置为
false
,(因为
OnDisable()
仍在执行,但之后不会发生进一步的处理)


解决方法是将此脚本附加到一个单独的未启用/禁用的游戏对象上,并可以管理此淡入/淡出效果

好的,谢谢您的回复:)我也解释了为什么couroutine aproach也不起作用。我想可能会有一个变通的办法。另一个解决办法就是你提到的使用动画。虽然我不完全理解为什么会出现同样的问题。动画将包括将UI元素的alpha设置为255到0的关键帧。帧之间的距离越远,两种(或更多)状态之间的过渡(或淡入)速度越慢,即不透明或透明。这是相同的问题,因为动画在连接到对象时停止工作。如果不禁用动画制作者连接到的游戏对象,它将按预期工作。如果您正在设置
Time.timeScale
,并且希望动画在
Time.timeScale=0时继续
请记住将动画制作者的
更新模式
设置为
未缩放时间
谢谢您的回复。事实上,我昨天也发现这是由于时间的原因。很抱歉丢失了信息:)是的,时间。我需要的是无刻度的时间。很好。