Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/unity3d/4.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# 协同程序不';t执行setActive(错误)_C#_Unity3d_Unity5 - Fatal编程技术网

C# 协同程序不';t执行setActive(错误)

C# 协同程序不';t执行setActive(错误),c#,unity3d,unity5,C#,Unity3d,Unity5,我在游戏中有一个类似于电源对象的对象:当我的玩家进入电源时,它会激活一个面板,指示电源被抢走,并且在3秒钟后该面板会消失。当我按下电源时,我的面板出现了,但它并没有消失。我正在使用这样的协同程序: using UnityEngine; using System.Collections; public class shrink : MonoBehaviour { public float value = 0.1f; //1 by default in inspector pri

我在游戏中有一个类似于电源对象的对象:当我的玩家进入电源时,它会激活一个面板,指示电源被抢走,并且在3秒钟后该面板会消失。当我按下电源时,我的面板出现了,但它并没有消失。我正在使用这样的协同程序:

using UnityEngine;
using System.Collections;

public class shrink : MonoBehaviour {

    public float value = 0.1f; //1 by default in inspector
    private bool colided = false;
    private float speed;
    Manager gameManager;
    public GameObject panel;
    // Update is called once per frame
    void Start(){
        speed = 3.4f;
        gameManager = GameObject.Find ("GameController").GetComponent<Manager> ();
    }

    void OnTriggerEnter(Collider c)
    {
        if (c.gameObject.tag == "Player") {
            colided = true;
            gameManager.powerUp1 = true;
            StartCoroutine(menuOp());
        }
    }

    //This method is executed every frame
    void Update(){
        if (colided) {
            Vector3 temp = transform.localScale; 
            //We change the values for this saved variable (not actual transform scale)
            temp.x -= value * Time.time;
            temp.y -= value * Time.time;

            if (temp.x > 0) {
                speed += 0.02f;
                transform.Rotate (0f, 0f, Time.deltaTime * 90 * speed);
                transform.localScale = temp;
            } else {
                Object.Destroy (this.gameObject);
            }
        }
    }


    IEnumerator menuOp(){
        panel.SetActive (true);
        yield return new WaitForSeconds (3f);
        panel.SetActive (false);
    }
}
使用UnityEngine;
使用系统集合;
公共阶层心理医生:单一行为{
公共浮点值=0.1f;//在inspector中默认为1
私有bool colided=false;
私人浮动速度;
游戏经理;
公共游戏对象面板;
//每帧调用一次更新
void Start(){
速度=3.4f;
gameManager=GameObject.Find(“GameController”).GetComponent();
}
无效对撞机(对撞机c)
{
如果(c.gameObject.tag==“玩家”){
colided=true;
gameManager.powerUp1=true;
启动例程(menuOp());
}
}
//此方法每帧执行一次
无效更新(){
如果(有结肠炎){
Vector3 temp=transform.localScale;
//我们更改此保存变量的值(不是实际的变换比例)
温度x-=值*时间时间;
温度y-=值*时间时间;
如果(温度x>0){
速度+=0.02f;
变换.旋转(0f,0f,Time.deltaTime*90*速度);
transform.localScale=temp;
}否则{
销毁(这个游戏对象);
}
}
}
IEnumerator菜单(){
panel.SetActive(真);
返回新的等待秒(3f);
panel.SetActive(假);
}
}

Ps:更新中的内容与我需要做的事情无关,因此我认为它不符合我的需要。

也许你应该检查你的游戏对象(心理医生)是否未激活或已销毁。
协同程序不适用于未激活的游戏对象。

也许你应该检查你的游戏对象(心理医生)是否未激活或已销毁。
协同程序不适用于非活动的游戏对象。

我认为您可能在
WaitForSeconds(3f)
结束之前销毁了游戏对象,这将阻止
panel.SetActive(false)
执行

在更新方法的“else语句to if(temp.x>0)”中,您正在销毁试图显示/隐藏面板的游戏对象


如果您当时确实需要销毁此游戏对象,您应该将IEnumerator转换到另一个脚本,并从此(shrink.cs)脚本调用它。

我认为您可能在
WaitForSeconds(3f)
结束之前销毁了该游戏对象,这将阻止
panel.SetActive(false)
执行

在更新方法的“else语句to if(temp.x>0)”中,您正在销毁试图显示/隐藏面板的游戏对象


如果您当时确实需要销毁此游戏对象,您应该将IEnumerator转换为另一个脚本,并从此(shrink.cs)脚本调用它。

在3秒钟之前销毁对象可能是个问题。您可以通过放置两个日志进行检查:

1-在“Object.Destroy”行之后
2-在“WaitForSeconds”之后

在3秒钟之前销毁对象可能是个问题。您可以通过放置两个日志进行检查:

1-在“Object.Destroy”行之后
2-在“WaitForSeconds”之后

“curoutine”是指“coroutine”?请告诉我们我们的答案是否正确,以及您是否需要进一步帮助。“curoutine”是指“coroutine”?请让我们知道我们的答案是否正确,以及您是否需要进一步的帮助。谢谢,我认为您的答案是可以接受的,但我已经解决了,不需要向渲染器询问,我不需要销毁游戏对象:D,这样我就可以将脚本保存到最后:D谢谢,我认为您的答案是可以接受的,但我已经解决了这个问题,不需要使用渲染器,我不需要破坏gameobject:D,这样我就可以将脚本保存到最后:D