将Coroutine函数添加到Transform

lik*_*uku 0 extension-methods transform unity-game-engine

我正在创建一个扩展Transform的统一脚本

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");
    } 
}
Run Code Online (Sandbox Code Playgroud)

当我调用

transform.tester();
transform.tester2();
Run Code Online (Sandbox Code Playgroud)

只记录"hello2".

当我试着

StartCoroutine(transform.tester());
Run Code Online (Sandbox Code Playgroud)

我收到以下错误:

"错误CS0103:当前上下文中不存在名称'tester'"

"Transform"不包含'StartCoroutine'的定义,并且没有可访问的扩展方法'StartCoroutine'接受类型'Transform'的第一个参数(你是否缺少using指令或汇编引用?)

当我试着

transform.StartCoroutine(transform.tester());
Run Code Online (Sandbox Code Playgroud)

我有:

"错误CS1061:'转换'不包含'StartCoroutine'的定义,并且没有可访问的扩展方法'StartCoroutine'接受类型'Transform'的第一个参数(你是否缺少using指令或汇编引用?)"

der*_*ugo 6

  1. 你不能把Coroutine称为一种方法,你宁愿通过它来启动它StartCoroutine().当你像普通方法一样调用它时,它将被忽略(正如你已经注意到的那样).

  2. 你不能使用transform.StartCoroutine()因为Transform是类型Component不是继承MonoBehaviour.

    StartCoroutine()只能用于MonoBehaviour.


因此,假设您已经在内部调用它,MonoBehaviour因为使用transform而不是简单地做

StartCoroutine(transform.tester());
Run Code Online (Sandbox Code Playgroud)

只要从一个内部MonoBehaviour或另一个内部调用,它对我来说完全没问题

anyGameObject.GetComponent<MonoBehaviour>().StartCoroutine(transform.tester());
Run Code Online (Sandbox Code Playgroud)

另一个MonoBehaviour将运行Coroutine的人甚至不必在同一个对象上,但你必须确保MonoBehaviour附加了任何其他脚本anyGameObject.