Как изменить родителя GameObject, созданного с помощью PrefabUtility.InstantiatePrefab?

Подделка fake - это общий термин, который может использоваться для описания либо заглушки, либо макетного объекта (рукописного или иного), потому что оба они выглядят как реальный объект.

]

Является ли подделка заглушкой или макетом, зависит от того, как она используется в текущем тесте. Если он используется для проверки взаимодействия (утверждается против), это макет объекта. В противном случае это заглушка.

Fakes гарантирует, что тест будет выполняться плавно. Это означает, что читатель вашего будущего теста поймет, каким будет поведение поддельного объекта, без необходимости читать его исходный код (без необходимости зависеть от внешнего ресурса).

Что означает тестовый запуск? Например, в нижеприведенном коде:

 public void Analyze(string filename)
        {
            if(filename.Length<8)
            {
                try
                {
                    errorService.LogError("long file entered named:" + filename);
                }
                catch (Exception e)
                {
                    mailService.SendEMail("admin@hotmail.com", "ErrorOnWebService", "someerror");
                }
            }
        }

Вы хотите протестировать метод mailService.SendEMail () , чтобы сделать это, чтобы вы могли имитировать исключение в вашем тестовом методе, так что вы просто необходимо создать класс Fake Stub errorService для имитации этого результата, тогда ваш тестовый код сможет протестировать метод mailService.SendEMail (). Как вы видите, вам нужно смоделировать результат, который является результатом другого класса External Dependency ErrorService.

3
задан derHugo 15 January 2019 в 16:09
поделиться

2 ответа

Как мне изменить родителя GameObject, созданного с помощью PrefabUtility.InstantiatePrefab?

Это верно, но убедитесь, что отменить также является ] экземпляр объекта .

obj.transform.parent = cancel.transform;
0
ответ дан shingo 15 January 2019 в 16:09
поделиться

Извините, я только что нашел проблему:

Я не добавил ее, поскольку сообщение об ошибке сбивало с толку / неправильно сформулировано.

Я использовал Resources.FindObjectsOfTypeAll для проверки наличия exampleParent типа SomeType на сцене.

Следуя примеру Unity, который должен исключить префабы, я использовал

// Validation for the Menu item
[MenuItem("Example/Create Clone", true]
private bool TargetAvailable()
{
    foreach (var target in (SomeType[])Resources.FindObjectsOfTypeAll(typeof(SomeType))
    { 
        if (target.hideFlags == HideFlags.NotEditable || target.hideFlags == HideFlags.HideAndDontSave)
            continue;

        if (!EditorUtility.IsPersistent(target.transform.root.gameObject))
            continue;

        exampleParent = target.transform;
        return true;
    }

    exampleParent = null;
    return false;
}

Но это на самом деле неправильно и не работает, так как оно всегда возвращалось мне ссылку SomeType из сборных! (Мне уже показалось немного странным, что они делают

!EditorUtility.IsPersistent(target.transform.root.gameObject))
    continue;

Я не уверен, что этот ! может быть типом в их примере кода?!


Так ошибка, которая звучит так, как если бы установка родителя не была разрешена, на самом деле означает и должна сказать

установка родителя в . Преобразование, которое находится в префабе, не допускается. .

, чем я нашел бы актуальную проблему в первую очередь.


Так что снова в качестве обходного пути, пока я не смогу выяснить, что FindObjectsOfTypeAll вместо этого я переключился на Object.FindObjectOfType, предполагая, что моя цель всегда будет активной на сцене. И использование SetParent теперь работает вместе с PrefabUtitlity.InstantiatePrefab.

0
ответ дан derHugo 15 January 2019 в 16:09
поделиться
Другие вопросы по тегам:

Похожие вопросы: