您好,欢迎来到暴趣科技网。
搜索
您的当前位置:首页Unity关于不同脚本之间相互调用变量的方法

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

来源:暴趣科技网

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

小伙伴们大同小异地提供了三种方法,但都是与加载组件有关系,比如这个:

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

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

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

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;

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

}

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()的执行效率非常低,所以如果可能的话还是尽可能使用“直接赋值法”吧。

因篇幅问题不能全部显示,请点此查看更多更全内容

Copyright © 2019- baoquwan.com 版权所有 湘ICP备2024080961号-7

违法及侵权请联系:TEL:199 18 7713 E-MAIL:2724546146@qq.com

本站由北京市万商天勤律师事务所王兴未律师提供法律服务