C# 协同程序不';t执行setActive(错误)
我在游戏中有一个类似于电源对象的对象:当我的玩家进入电源时,它会激活一个面板,指示电源被抢走,并且在3秒钟后该面板会消失。当我按下电源时,我的面板出现了,但它并没有消失。我正在使用这样的协同程序: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
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