Unity如何同时调⽤另⼀个脚本的函数和变量
之前⽤脚本调⽤另⼀个脚本的变量我都是⽤简单的static变量来解决的,但是今天看unity官⽅教程的时候发现可以同时调⽤
另⼀个脚本的函数和变量。⾃⼰尝试运⾏了⼀下,可是报错了。好尴尬 ̄□ ̄||
官⽅的代码是这样的:
void Start ()
{
alpha = 29;
myOtherclass = new otherAccess();
myOtherclass .FruitMachine (alpha ,myOtherclass .apples );
}
……
此处省略⼀万字,要看源码的点下⾯链接:
查了⼀天的资料终于搞明⽩,有两个问题:⼀是:从MonoBehaviour继承过来的类,unity需创建实例才能调⽤。⼆是:Awake, Start, Update的时间周期问题。
这⾥⾮常感谢提供答案的⼩伙伴,这⾥贴出他们的解决链接:
所以,最后我的代码是:
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class test : MonoBehaviour {
private otherAccess myOtherclass;
public int alpha = 5;
// Use this for initialization
void Start ()
{
GameObject go=new GameObject ();
go.AddComponent <otherAccess> ();
myOtherclass = (otherAccess)go.GetComponent (typeof(otherAccess));
myOtherclass.FruitMachine (alpha, myOtherclass.apples);
}
// Update is called once per frame
void Update () {
}
}
解释:C#使⽤MoboBehaviour必须要实例化,GameObject go=new GameObject ();
unity 教程并且需要在新建的实例上⽤到, go.AddComponent <otherAccess> ();
最后要将应⽤到当前脚本,这句很重要: myOtherclass = (otherAccess)go.GetComponent (typeof(otherAccess));只有他成功传递了,当前脚本才能正确调⽤函数和变量:myOtherclass.FruitMachine (alpha, myOtherclass.apples);运⾏成功:
没有报错
当然这⾥⾯有个隐藏的很关键的问题,就是刚才我们说到的第⼆点;
void Start ()
{
apples = 1;
}
void Awake()
{
apples = 1;
}
如果赋值是在Start⾥⾯完成,那么myOtherclass.apples是掉不到赋值后的数值的,⽽放在Awake⾥⾯则可以,因为Awake是所有mono 调⽤start⽅法之前都会被调⽤的,这样可以避免某些调⽤的时候instance=null的情况。
看着好像很简单,其实花了好长时间才弄明⽩, 这也是基础不扎实的缘故吧!
加油ヾ(◍°∇°◍)

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。