我将许多预制件存储在一个阵列中,并通过单击一个按钮一次实例化一个。该对象出现,但始终处于非活动状态。
我花了几个小时寻找答案,并尝试了很多,但问题仍然存在。我希望可以问问,即使有几个类似的问题,但没有一个答案可以解决我的问题。 就像我已经描述过的那样,我想在每次单击按钮时从数组中实例化一个GameObject,并且确实出现了该对象,但是当我尝试在其上启动协程时(如果有帮助,它是一个IEnumerator,它将使Object淡出。处理它的颜色Alpha通道),我总是收到一条错误消息,说GameObject未激活。我无法通过编写myPrefab.gameObject.SetActive(true)将其设置为活动状态,并且尝试在代码中的多个位置调用它。它始终保持不活动状态。有人知道可能是什么问题吗?
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
}
}
在这里,我尝试在其自己的代码的Awake函数中将对象设置为活动状态,但在Class1和Start函数这两个函数中也都对其进行了尝试。我也尝试过在foreach循环中为整个数组处理它。总是相同的结果。我要做的就是将其设置为活动状态,现在我什至不在乎淡出的东西是否正常工作。首先我以为是因为我的实例化对象是一个克隆对象,但是我找不到任何有关它的东西,所以即使解决方案很明显,也请帮忙!
答案 0 :(得分:0)
问题是您要引用实际的预制件本身,而该预制件在场景中实际上并不活跃。您需要创建一个游戏对象并将其值设置为实例化的预制件。以下应该可以工作
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;
}
}