1 public class MonoTest : MonoBehaviour { 2 3 /// <summary> 4 /// 1.在用户点击Inspector检视面板的Reset或者首次添加组件时被调用 5 /// 2.此函数只在编辑模式下(项目没有运行的时候)被调用。 6 /// 3.Reset最常用于在检视面板中给定一个默认值。 7 /// </summary> 8 void Reset() 9 { 10 11 } 12 13 14 /// <summary> 15 /// 1.Awake在脚本整个生命周期内像构造函数一样仅被调用一次 16 /// 2.初始化函数,在项目运动时系统自动调用 17 /// 3.Awake 在所有对象被初始化之后调用,所以可以安全的与其它对象对话或使用诸如GameObject.FindWithTag()这样的函数搜索它们 18 /// 4.不论脚本是否激活状态,Awake都会被调用(但如果绑定的物体没有激活,将不会调用Awake函数) 19 /// 5.Awake 总是在Start之前被调用 20 /// 6.它不能用来执行协同程序 21 /// 22 /// </summary> 23 void Awake() 24 { 25 //建议:一般在Awake方法中创建游戏对象或在Resources.Load(Prefab)对象。 26 //在start方法中去获取游戏对象或者游戏组件这样可以确保万无一失 了 27 28 } 29 30 31 /// <summary> 32 /// 1.Start 在脚本整个生命周期内仅被调用一次 33 /// 2.Start总是在Awake之后被调用 34 /// 3.Start总是在Update前调用 35 /// 4.必须在脚本被激活时才能被调用 36 /// </summary> 37 void Start() 38 { 39 40 } 41 42 43 /// <summary> 44 /// 1.Update是正常帧更新,会在每一帧调用一次 45 /// 2.帧长时时在改变Time.deltaTime 46 /// 3.一般用于非物理的运动(比如使一个物体匀速运动) 47 /// </summary> 48 void Update() 49 { 50 Debug.Log("Update时间间隔: " + Time.deltaTime); 51 } 52 53 54 55 56 57 /// <summary> 58 /// 1.FixedUpdate 是固定帧更新,会在每个固定的时间频率调用一次函数 59 /// 2.帧长时固定的(默认为0.02),不是时时改变的。 Edit ---》 Project Setting --》Time ---》Fixed Timestep 60 /// 3.一般用于物理的运动(比如控制一些诸如RigidBody, Collider等物理相关组件) 61 /// (物理引擎中用于物理的行为运动都是根据固定的时间来计算的) 62 /// 63 /// </summary> 64 void FixedUpdate() 65 { 66 Debug.Log("FixedUpdate时间间隔: " + Time.deltaTime); 67 } 68 69 /*** 70 * Update 和 FixedUpdate 区别: 71 * 1.两者帧长不同 72 * 2.FixedUpdate是渲染帧执行,如果你的渲染效率低下的时候FixedUpdate调用次数会跟着下降 73 * 3.Update 就比较适合做控制 74 * 4.LateUpdate 与 Update方式一样,唯一不同的是 75 * LateUpdate,在每帧Update执行完毕调用,他是在所有Update结束后才调用 76 * 举例:摄像机跟随,都是在所有Update 操作完才跟进摄像机 77 * 不然就有可能出现摄像机已经推进了,但是视角还未有角色的空帧出现 78 * 79 */ 80 81 82 83 }
Cube1上有脚本Script1 给Cube2添加脚本Script2,
在Script1中start并调用中的Script2中的变量,这个变量在Script2中start中赋值,结果得到的是默认值,
要解决:在Awake中赋值。(添加脚本后,获取变量,这时候还没有执行start还没有调用)
如果两个脚本中在Awake方法里都做了事情,但是这样这两件事也有前后顺序怎么办?
可以设置脚本的执行前后顺序
Editor ---》 Project Setting ----》 Script Execution Order
或者选中脚本
拖拽添加需要执行顺序的脚本
设置后边的数字,从小到大,从先到后执行