Unity关于不同脚本之间相互调用变量的方法

转自 https://blog.csdn.net/jennyhigh/article/details/80900538
本来是想绕开一个脚本调用其他脚本变量这个事情的,但是不管怎么写最后还是绕回来了,有些功能必须这样才好完成。

小伙伴们大同小异地提供了三种方法,但都是与加载组件有关系,比如这个:
在这里插入图片描述
原文地址:https://blog.csdn.net/woerxi/article/details/17621841#commentBox

但是我不喜欢,只是调用脚本的变量,还有把变量他妈和他奶奶一起带上,好麻烦……

至少我这个功能不需要这样,除非有其他的顺带功能。

以前我也写过脚本互调变量的代码,只是忘了,所以我想肯定有其他的办法,终于在蛮牛上找到了,其中一个小伙伴是这样写的:

在这里插入图片描述
原来就这么简单,所以最后我的代码是这样的:

public class PickBadgeA : MonoBehaviour {

public static int testcount;    //定义一个静态共有;

if (pick) 
{
                       ……
testcount = 1;
Debug.Log ("捡起来了!");

}

……………………脚本分割线……………………

public class Addtime : MonoBehaviour {


public int addcount;

void Update ()
{
……
if (check)
{

addcount = PickBadgeA.testcount + PickBadgeB.testcountB+OpenCabinet.testcountC;

                       //调用上个脚本的静态共有;

}

无意中还找到一个调用函数的,感觉也不错,地址如下:
https://blog.csdn.net/liumou111/article/details/46754051
----------------分割线-----------------
调用其他实例的脚本是一种很常用的需求,在Unity3D中实现起来也有多种方法,假设在ScriptB有一个DoSomething函数,如下所示:

using UnityEngine;

public class ScriptB : MonoBehaviour {

public void DoSomething() {

Debug.Log("Hi there");

}

}

在ScriptA中如果要访问某个GameObject的ScriptB脚本中的DoSomething函数:

using UnityEngine;

public class ScriptA : MonoBehaviour {

public ScriptB other;

void Update() {

other.DoSomething();

}

}

注意ScriptA有一个ScriptB类型的公共变量,这是一个绝妙的小技巧,如此一来你便可以通过编辑器拖拽任何含有ScriptB这一脚本的GameObject至该变量上(因为是public的,所以暴露于编辑器界面中),Unity会自动识别你需要赋值的不是那个GameObject,而是它所包含的ScriptB脚本。

除此之外,如果你不喜欢这种在编辑器中直接赋值的办法,你可以通过GameObject.Find(“somename”) 来获取GameObject:

    GameObject go = GameObject.Find("somegameobjectname");
    
    ScriptB other = (ScriptB) go.GetComponent(typeof(ScriptB));
    
    other.DoSomething();

不过需要注意的是GameObject.Find()的执行效率非常低,所以如果可能的话还是尽可能使用“直接赋值法”吧。

  • 15
    点赞
  • 45
    收藏
    觉得还不错? 一键收藏
  • 6
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值