首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >我的GameObject总是不活动,SetActive(真)不工作,协同线也不会启动

我的GameObject总是不活动,SetActive(真)不工作,协同线也不会启动
EN

Stack Overflow用户
提问于 2018-12-29 16:26:22
回答 1查看 780关注 0票数 0

我有许多预制件存储在一个数组中,并通过单击一个按钮一次实例化一个。该对象将出现,但始终处于非活动状态。

我已经寻找了好几个小时的答案,并且尝试了很多次,但问题依然存在。我希望这是可以问,即使有几个类似的问题,但没有一个答案解决了我的问题。就像我已经描述过的那样,我希望通过每次单击一个数组来实例化一个GameObject,并且这个对象确实会出现,但是当我试图在它上启动一个协同线时(如果这有帮助的话,它是一个IEnumerator,它会让对象通过处理它的颜色alpha通道而淡出),我总是会收到一个错误,显示GameObject是不活动的。我无法通过编写myPrefab.gameObject.SetActive(true)将其设置为活动,并且我尝试在代码中的几个地方调用它。它总是不活动。有谁知道可能是什么问题吗?

代码语言:javascript
复制
public class Class1 : MonoBehaviour
{
    [SerializeField]
    private MyClass[] myPrefabs;

    private MyClass myCurrentPrefab;

    private int myIndex;

    public void ButtonEffect()
    {
        InstantiatePrefab();
        myCurrentPrefab.OnButtonEffect();
    }

    private void InstantiatePrefab()
    {
        myIndex = Random.Range(0, myPrefabs.Length);
        myCurrentPrefab = myPrefabs[myIndex];
        Instantiate(myCurrentPrefab);
    }
}

public class MyClass : MonoBehaviour
{
    private SpriteRenderer mySprite;

    private void Start()
    {
        mySprite = GetComponent<SpriteRenderer>();
    }

    private void Awake()
    {
        this.gameObject.SetActive(true)
    } 

    private void OnButtonEffect()
    {
        StartCoroutine(FadeOut(mySprite, 3));
    }

    public IEnumerator FadeOut(SpriteRenderer spriteToFade, float duration)
    {
        //DoFadeOutStuff
    }
}

在这里,我尝试在它自己的代码的唤醒函数中设置活动对象,但我也在Class1的函数和它的开始函数中尝试过它。我还试图在foreach循环中为整个数组处理它。结果总是一样的。我想要做的就是把它设置为活动,现在我甚至不关心我的淡出东西是否正确工作。首先,我认为这是因为我的实例化对象是一个克隆体,但是我找不到任何关于它的东西,所以即使解决方案非常明显,请帮助!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-12-30 02:04:36

问题是你是在引用实际的预制件本身,它实际上并不活跃在场景中。您需要创建一个游戏对象,并将其值设置为实例化的预制件。以下几点应该有效

代码语言:javascript
复制
using UnityEngine;

public class Class1 : MonoBehaviour
{
[SerializeField]
private GameObject[] myPrefabs;

public void ButtonEffect()
{
    var go = InstantiatedPrefab();
    go.GetComponent<MyClass>().OnButtonEffect();
}

private GameObject InstantiatedPrefab()
{
    var index = Random.Range(0, myPrefabs.Length);
    return Instantiate(myPrefabs[index]);
}
}

using System.Collections;
using UnityEngine;

public class MyClass : MonoBehaviour
{
private SpriteRenderer mySprite;

private void Start()
{
    mySprite = GetComponent<SpriteRenderer>();
}

public void OnButtonEffect()
{
    StartCoroutine(FadeOut(mySprite, 3));
}

private IEnumerator FadeOut(SpriteRenderer spriteToFade, float duration)
{
    print("FadeOut");
    yield return 0;

}
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/53971275

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档