在使用函数时,偶尔想要传递组件(脚本)
比如一个函数的参数有一个GameObject,而且你想要访问这个objOne上的ScriptOne脚本的参数num
你可能会这样:
private void Func(GameObject obj)
{
Debug.Log(obj.GetComponent<ScriptOne>().num);
}
但是如果在使用这个函数时传递的GameObject(如objTwo)上没有ScriptOne这个脚本,而是叫ScriptTwo(ScriptTwo上也定义了num的变量)。
现在我也需要使用这个函数并获得ScriptTwo脚本上的num,该怎么做呢
步骤一:
创建一个新的脚本命名为:"ScriptFather",并且设置变量num
// 新键一个脚本,用来做父类
public class ScriptFather : MonoBehaviour
{
// 定义变量
public int num;
}
步骤二:
将ScriptOne和ScriptTwo的脚本设置为ScriptFather的子类
步骤三:
改变上面函数的写法
// 改一下函数
// where T : ScriptFather 不能掉,冒号后面写的是传进来的脚本的父类名,这也是为什么之前要创建父脚本,而且要将变量放在父脚本中
private void Func<T>(GameObject obj) where T : ScriptFather
{
// 获取obj脚本上的num
Debug.Log(obj.GetComponent<T>().num);
}
步骤四:
这样就可以将函数(或者组件)当做参数来传递了,上面的例子是ScriptOne和ScriptTwo
// 传递GameObject(objOne)的时候将其组件上对应的脚本名(ScriptOne)也传过去
Func<ScriptOne>(objOne);
Func<ScriptTwo>(objTwo);
小白第二次发布文章,出错望指正
如侵权,请联系我