下面的示例解释了为Unity3D引擎编写脚本的时候如何来使用静态变量.本文示例的脚本使用C#编写,同样的适用于javascript。
在深入主题之前,必须要清楚地是我们应该尽量避免使用静态变量,有大量的缘由可以很容易在
网上找到.大部分时候使用单例更好。了解了上面的东西之后,这里有一个对静态变量的简单定义:
它们是属于类的变量,不属于对象或类创建。这意味着静态变量始终保持同样的值,不论给定类的对象是什么
另外一个特征是:只要类处于内存中,它们仍是有效的引用。静态变量在类创建之前由编译器初始化,先于其他变量
或方法.但是这对于Unity3D来说又意味这什么呢?
这意味着不需要产生一个类对象来读或者写一个变量值,所以只需要一次性获取游戏对象或组件。
下面是一个示例:有50个敌人对象在一个unity3D场景中,它们都绑定了AI脚本并且需要主角的Transform
来正确的工作,那么在每个敌人的Awake()函数中如果不使用静态变量的话应该是:
- public class EnemyBehaviour:MonoBehaviour
- {
- private Transform playerTransform;
- void Awake()
- {
- playerTransform = GameObject.FindWithTag("Player").GetComponent<Transform>();
- }
- 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<Transform>();
- }
- }
接下来,无论何时敌人的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暴露的静态变量。
相关推荐
主要介绍了python类和函数中使用静态变量的方法,实例分析了三种常用的实现技巧,具有一定参考借鉴价值,需要的朋友可以参考下
MarkDown文档,大家应该都知道,@Value注解可以给类中的非静态变量注入值,但是给静态变量注入值则会有警告,结果是失败的,本文档说明了如何使用@Value注解给类的静态变量赋值
用c++的类实现,对于c++初学者帮助较大,主要熟悉静态变量 静态方法的使用 将练习与数据结构相结合
wpf 给控件绑定静态变量,静态变理改变后控件上的值随着变量的demo,这只是个demo,具体应用场景可以根据实际的情况进行调整,本demo使用 vs2019进行编写。
(注:所有库都在同一进程中使用) 答案:是共享同一个变量。即:在A是动态库的这种情况下,B和C访问到的X是同一变量。 博文地址:http://blog.csdn.net/guggy/article/details/8136325 或即时记:...
VB 静态变量举例 VB 静态变量举例 VB 静态变量举例
C#中静态变量的使用,与大家分享,不足之处还请原谅,哈哈!
静态变量和非静态变量的区别
利用静态变量对函数访问次数计数
静态变量的使用举例,我要 积分,下载没分了
statilocal java 静态变量和静态块加载顺序,静态变量和同名静态变量块加载的顺序。
这是我学Unity多年来收集和使用的天空盒子,一个动态天空盒子的实例+22个静态天空盒子含实例。用Unity有了这一款适合所有场景使用。 里面包含素材和实例,适合做游戏、电影、视频场景
block,局部变量,全部变量,static的静态变量关系
静态全局变量,静态局部变量,全局变量,局部变量静态全局变量,静态局部变量,全局变量,局部变量
Java中的静态变量静态方法静态块与静态类.docx
全局变量、局部变量、静态全局变量、静态局部变量的区别
易语言静态变量初始化源码,静态变量初始化,静态变量初始化例子
19.静态变量.zip19.静态变量.zip19.静态变量.zip19.静态变量.zip19.静态变量.zip19.静态变量.zip19.静态变量.zip19.静态变量.zip19.静态变量.zip19.静态变量.zip19.静态变量.zip19.静态变量.zip19.静态变量.zip19....
在Java中定义变量时需要慎重考虑是静态还是非静态,因为静态拥有绝对优先权!
分析了php中静态类与静态变量用法类的区别,创建对象$object = new Class(),然后使用”->”调用:$object->attribute/function,前提是该变量/方法可访问。直接调用类方法量:class::attribute/function,无论是静态/...