使用函数传递组件(把组件当做函数的参数)

在使用函数时,偶尔想要传递组件(脚本)

比如一个函数的参数有一个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);

小白第二次发布文章,出错望指正

如侵权,请联系我

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值