Я получил ошибку ниже в игре Unity3D для iOS.

Assets/Scripts/Block/BlockMaker.cs(24,55): error CS1061: Type `UnityEngine.Object' does not contain a definition for `GetComponent' and no extension method `GetComponent' of type `UnityEngine.Object' could be found (are you missing a using directive or an assembly reference?)

enter image description here

Вот код:

Block block = null;

        for (int i = 0; i < listBlocks.Count; ++i)
        {
            if (listBlocks[i].GetComponent<Block>().type == type) {
                block =  Instantiate(listBlocks[i]).GetComponent<NormalBlock>(); // Error for this line
            }
        }

Вот скриншот введите описание изображения здесь

enter image description here

Как исправить эту проблему? Уже гуглил .. никто не помог мне исправить.

2
iPhoneProcessor 28 Май 2017 в 17:08

2 ответа

Лучший ответ

Вы должны разыграть то, что возвращает Instantiate, то есть Object. Проверьте документацию: https://docs.unity3d.com/ScriptReference/Object.Instantiate. HTML

block = ( Instantiate(listBlocks[i]) as GameObject).GetComponent<NormalBlock>();
3
Hellium 28 Май 2017 в 14:19

В старой версии Unity, вызывающей функцию Instantiate, будет пытаться вызвать {{ X1}}, который возвращает Object.

В последней версии Unity вызов Instantiate вызовет GameObject.Instantiate, который возвращает GameObject, поэтому вам даже не нужно приводить его к GameObject. Этот код был скомпилирован с версией 5.6 , но не с вашей версией 4.6.9 .

Использование:

block = GameObject.Instantiate(listBlocks[i]).GetComponent<NormalBlock>(); 

ИЛИ приведите его к GameObject, как указано в ответе Hellium.

GameObject obj = Instantiate(listBlocks[i]) as GameObject;
block = obj.GetComponent<NormalBlock>();
2
Programmer 28 Май 2017 в 14:21