我有许多预制件存储在一个数组中,并通过单击一个按钮一次实例化一个。该对象将出现,但始终处于非活动状态。
我已经寻找了好几个小时的答案,并且尝试了很多次,但问题依然存在。我希望这是可以问,即使有几个类似的问题,但没有一个答案解决了我的问题。就像我已经描述过的那样,我希望通过每次单击一个数组来实例化一个GameObject,并且这个对象确实会出现,但是当我试图在它上启动一个协同线时(如果这有帮助的话,它是一个IEnumerator,它会让对象通过处理它的颜色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
}
}在这里,我尝试在它自己的代码的唤醒函数中设置活动对象,但我也在Class1的函数和它的开始函数中尝试过它。我还试图在foreach循环中为整个数组处理它。结果总是一样的。我想要做的就是把它设置为活动,现在我甚至不关心我的淡出东西是否正确工作。首先,我认为这是因为我的实例化对象是一个克隆体,但是我找不到任何关于它的东西,所以即使解决方案非常明显,请帮助!
发布于 2018-12-30 02:04:36
问题是你是在引用实际的预制件本身,它实际上并不活跃在场景中。您需要创建一个游戏对象,并将其值设置为实例化的预制件。以下几点应该有效
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;
}
}https://stackoverflow.com/questions/53971275
复制相似问题