Добавление функций сопрограмм для преобразования - PullRequest
0 голосов
/ 21 февраля 2019

Я создаю скрипт в расширении Unity, расширяющем

using UnityEngine;
using System.Collections;
using UnityEditor;

public static class TransformExtension
{
    //lots of functions

     public static IEnumerator tester(this Transform test)
    {
        Debug.Log("hello");
        yield return null;
    }


    public static void tester2(this Transform test)
    {
        Debug.Log("hello2");
    } 
}

при вызове

transform.tester();
transform.tester2();

только "hello2" регистрируется.

при попытке

StartCoroutine(transform.tester());

я получил следующие ошибки:

"ошибка CS0103: имя" тестер "не существует в текущем контексте"

"Преобразование"не содержит определения для «StartCoroutine» и не найден доступный метод расширения «StartCoroutine», принимающий первый аргумент типа «Transform» (отсутствует директива using или ссылка на сборку?)

когда я пытался

transform.StartCoroutine(transform.tester());

я получил:

"ошибка CS1061:« Преобразование »не содержит определения для« StartCoroutine »и не доступен доступный метод расширения« StartCoroutine », принимающийможно найти первый аргумент типа 'Transform' (вам не хватает директивы using или ссылки на сборку?) "

Ответы [ 2 ]

0 голосов
/ 21 февраля 2019
  1. Вы не можете вызвать Сопрограмму , как метод, который вам скорее всего нужно запустить с помощью StartCoroutine().Когда вы вызываете его как обычный метод, он просто игнорируется (как вы уже заметили).

  2. Вы не можете использовать transform.StartCoroutine(), поскольку Transformимеет тип Component и не наследуется от MonoBehaviour.

    Но StartCoroutine() можетиспользоваться только на MonoBehaviour.


Итак, если вы уже вызываете его из MonoBehaviour из-за использования transform вместо этого просто сделайте

StartCoroutine(transform.tester());

, который прекрасно работает для меня, пока вызывается из MonoBehaviour или, альтернативно,

anyGameObject.GetComponent<MonoBehaviour>().StartCoroutine(transform.tester());

Этот другой MonoBehaviour который будет запускать Coroutine даже не обязательно должен быть на том же объекте, но вы должны быть уверены, что к anyGameObject.

присоединен любой другой скрипт MonoBehaviour.
0 голосов
/ 21 февраля 2019

Вы не можете запускать сопрограммы, такие как вызовы функций. Добавить функцию, которая запускает сопрограмму.Кроме того, поскольку derHugo указал, что для достижения этой цели вам необходимо поведение монобеда, вы можете получить доступ к моно поведению через преобразование следующим образом:

public static IEnumerator Tester()
{
    Debug.Log("hello");
    yield return null;
}
public static void StartTester(this Transform test)
{
    test.GetComponent<MonoBehaviour>().StartCoroutine(Tester());
}

public static void tester2(this Transform test)
{
    Debug.Log("hello2");
}

Затем выполните следующее:

transform.startTester();
...