Unity3D如何使用静态变量

您所在的位置:网站首页 static变量怎么用 Unity3D如何使用静态变量

Unity3D如何使用静态变量

2023-03-22 17:00| 来源: 网络整理| 查看: 265

Unity3D如何使用静态变量 发表于2018-06-10 评论1 2k浏览

想免费获取内部独家PPT资料库?观看行业大牛直播?点击加入腾讯游戏学堂游戏程序行业精英群

711501594 下面的示例解释了为Unity3D引擎编写脚本的时候如何来使用静态变量。本文示例的脚本使用C#编写,同样的适用于javascript。在深入主题之前,必须要清楚地是我们应该尽量避免使用静态变量,有大量的缘由可以很容易在网上找到。大部分时候使用单例更好。了解了上面的东西之后,这里有一个对静态变量的简单定义:它们是属于类的变量,不属于对象或类创建。这意味着静态变量始终保持同样的值,不论给定类的对象是什么另外一个特征是:只要类处于内存中,它们仍是有效的引用。静态变量在类创建之前由编译器初始化,先于其他变量或方法。但是这对于Unity3D来说又意味这什么呢?这意味着不需要产生一个类对象来读或者写一个变量值,所以只需要一次性获取游戏对象或组件。下面是一个示例:有50个敌人对象在一个unity3D场景中,它们都绑定了AI脚本并且需要主角的Transform来正确的工作,那么在每个敌人的Awake()函数中如果不使用静态变量的话应该是: public class EnemyBehaviour:MonoBehaviour { private Transform playerTransform; void Awake() { playerTransform = GameObject.FindWithTag("Player").GetComponent(); } void Update() { // Do Something Based On The Player's Position if(playerTransform.position.x>100) { // Do Something } } } 利用静态变量来做同样的事情,应该创建一个称为GameController的脚本。它可以一次性获得主角的Transfrom然后将它存入静态变量: public class GameController:MonoBehaviour { public static Transform playerTransform; void Awake() { playerTransform = GameObject.FindWithTag("Player").GetComponent(); } } 接下来,无论何时敌人的AI脚本需要知道主角的位置,只需要调用静态变量: public class EnemyBehaviour:MonoBehaviour { void Update() { // Acessing The Static Variable if(GameController.playerTransform.position.x > 100) { // Do Something } } } 注意到在第二个例子中,我们只需要调用一次Awake()方法来获得主角对象的Transform引用。然而在第一个例子中则需要在每个敌人调用一次Awake()方法,这样就调用了50次该方法。 所以即使在场景中有50个敌人依然只需要调用一次的Awake方法,因为其他脚本可以直接调用GameController暴露的静态变量。

原文链接

著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

如社区发表内容存在侵权行为,您可以点击这里查看侵权投诉指引

标签:

UnityJavaScript场景

本文作者

feng 暂无简介 Mesh绘制交互网格 Unity基本介绍与使用 Unity使用RenderTexture实现实时阴影绘制 Unity 贴图压缩方法及对比 Unity3D AsssetBundle加载效率比较 GWB公众号 腾讯游戏学堂公众号


【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3